Spring Bean的生命周期

(纯属读书笔记,非原创,建议读原文)

深度解析 Spring 源码:探寻Bean的生命周期

Bean 的生命周期的各个阶段

探秘Spring(1)------Bean的生命周期

bean是一个由Spring IoC容器实例化、组装和管理的对象。

一、 Bean生命周期概述

Bean的生命周期包括了定义、实例化、初始化和销毁四个关键阶段,Spring框架在每个阶段都提供了钩子方法,允许开发者在特定的时机执行自定义的逻辑,从而实现对Bean生命周期的定制化管理。

  • Bean的定义阶段: 在这个阶段,Spring会解析Bean的定义,包括从配置文件中读取Bean的元数据,例如类名、属性值、依赖关系等。这个阶段的主要目标是将Bean的定义加载到Spring的应用上下文中。
  • Bean的实例化阶段: 一旦Bean的定义加载到容器中,Spring会根据这些定义创建Bean的实例。这可能涉及到通过构造函数或工厂方法创建实例,并将依赖项注入到Bean中。在这个阶段,Spring会创建Bean的原始对象,并将其放入容器中。
  • Bean的初始化阶段: 在这个阶段,Spring会对Bean进行初始化。这包括执行任何在Bean实例化之后需要执行的定制逻辑,例如调用初始化方法、应用- BeanPostProcessors等。这个阶段是在Bean实例创建完成后、在将Bean实例提供给应用程序之前执行的。
  • Bean的销毁阶段: 最后一个阶段是Bean的销毁。在容器关闭或者特定的销毁时机触发时,Spring会调用Bean的销毁方法,执行清理工作,例如释放资源、关闭连接等。这个阶段是确保Bean在不再需要时能够正确地释放资源。

二、核心拆解:Bean生命周期的11个核心阶段(附阶段流转逻辑)

很多资料把Bean生命周期简化为3-5个阶段,这对实战指导意义不大。结合Spring源码中AbstractAutowireCapableBeanFactory的doCreateBean方法(Bean创建的核心方法),我将其细分为11个连贯阶段,并用"人的一生"做比喻,帮你快速理解:

整体流转:Bean定义加载 → 实例化 → 属性赋值 → Aware接口回调 → BeanPostProcessor前置处理 → 初始化(3种方式) → BeanPostProcessor后置处理 → 使用 → 销毁(3种方式)

三、简化版本

强烈建议读一下这一篇
探秘Spring(1)------Bean的生命周期

本文的主要代码在以下这个类中 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory

  1. 实例化
  2. 回调Aware接口(属性赋值)
  3. 执行初始化
    3.1. BeanPostProcessor的前置处理
    3.2 初始化方法
    3.3 BeanPostProcessor的后置处理
  4. 销毁

六、总结:理解生命周期的核心价值

Bean的生命周期看似复杂,实则是"分层职责、扩展灵活"的设计体现。掌握它的核心价值在于3点:

  • 编写健壮代码:在正确的阶段执行正确的操作(如资源初始化在@PostConstruct,释放在@PreDestroy),避免空指针和资源泄露;

  • 快速故障排查:按生命周期顺序定位问题(如初始化失败→检查属性注入→检查Aware接口→检查初始化方法);

  • 深度定制Spring:通过BeanPostProcessor、Aware接口等扩展点,实现自定义增强(如监控、权限校验、动态代理)。

最后,作为一名学习过程的学者,想分享一句心得:技术之路没有捷径,基础知识点的深度决定了你的技术天花板。Bean生命周期看似基础,却贯穿Spring开发的始终,只有真正理解其原理,才能从"会用Spring"升级到"懂Spring",甚至"定制Spring"。

相关推荐
亓才孓几秒前
[Maven]Maven基础
java·maven
Honmaple1 分钟前
OpenClaw 实战经验总结
后端
hello 早上好4 分钟前
05_Java 类加载过程
java·开发语言
echoVic18 分钟前
多模型支持的架构设计:如何集成 10+ AI 模型
java·javascript
橙露19 分钟前
Java并发编程进阶:线程池原理、参数配置与死锁避免实战
java·开发语言
golang学习记20 分钟前
Go 嵌入结构体方法访问全解析:从基础到进阶陷阱
后端
echoVic21 分钟前
AI Agent 安全权限设计:blade-code 的 5 种权限模式与三级控制
java·javascript
PPPPickup23 分钟前
easymall---图片上传以及图片展示
java
历程里程碑26 分钟前
Linux 库
java·linux·运维·服务器·数据结构·c++·算法
Wpa.wk26 分钟前
接口自动化 - 接口鉴权处理常用方法
java·运维·测试工具·自动化·接口自动化