Spring Bean 生命周期深度解析:从初始化到销毁的完整流程
Spring Bean 的生命周期是 Spring 容器管理 Bean 的核心逻辑,涵盖 “Bean 定义加载→实例化→属性注入→初始化→使用→销毁” 全流程。每个阶段都允许开发者通过接口或注解插入自定义逻辑,而 后置处理器(BeanPostProcessor/BeanFactoryPostProcessor) 则是扩展生命周期的关键机制。从 “生命周期完整流程→核心阶段解析→后置处理器详解→实战验证” 四个维度,彻底拆解 Spring Bean 的生命周期。
Spring Bean 生命周期全景图(核心流程)
Spring Bean 的生命周期可分为 “容器初始化阶段” 和 “容器销毁阶段”,每个阶段包含多个关键节点,严格遵循固定顺序:
graph TD
A[容器初始化:加载BeanDefinition] --> B[调用BeanFactoryPostProcessor 修改BeanDefinition]
B --> C[Bean实例化:调用构造器]
C --> D[属性注入:调用setter方法]
D --> E[Aware接口回调:BeanNameAware->BeanFactoryAware->ApplicationContextAware]
E --> F[BeanPostProcessor前置处理:postProcessBeforeInitialization]
F --> G["初始化回调:@PostConstruct->InitializingBean->init-method"]
G --> H[BeanPostProcessor后置处理:postProcessAfterInitialization]
H --> I[Bean就绪:容器初始化完成,可使用Bean]
I --> J[容器销毁触发]
J --> K["销毁回调:@PreDestroy->DisposableBean->destroy-method"]
容器初始化阶段:Bean 的创建与初始化
容器初始化阶段是 Bean 从 “定义” 到 “就绪” 的核心过程,每个节点都有明确的职责和触发时机。逐阶段解析:
1. 阶段 1:BeanFactoryPostProcessor 调用(容器级后置处理)
- 触发时机:Spring 容器加载完所有
BeanDefinition(Bean 的元数据)后,Bean 实例化前(此时仅解析配置,未创建任何 Bean 实例)。 - 核心作用:修改
BeanDefinition的配置(如动态修改属性值、添加依赖),扩展容器功能。 - 实现方式:实现
BeanFactoryPostProcessor接口,重写postProcessBeanFactory方法。
代码对应与输出
1 | // 容器后置处理器实现 |