1. Spring Bean生命周期全景图
在Spring框架中,Bean的生命周期管理是其核心功能之一。理解这个机制对于编写高效、稳定的Spring应用至关重要。一个典型的Spring Bean会经历以下完整生命周期阶段:
- 实例化(Instantiation)
- 属性赋值(Population)
- 初始化(Initialization)
- 使用(In Use)
- 销毁(Destruction)
每个阶段Spring都提供了扩展点,允许开发者介入控制。下面这张表格展示了完整生命周期阶段及其对应的回调接口:
| 生命周期阶段 | 回调接口/注解 | 触发时机 | 典型用途 |
|---|---|---|---|
| 实例化前 | BeanPostProcessor.postProcessBeforeInstantiation | 在构造函数调用前 | 替代默认实例化逻辑 |
| 实例化 | 构造函数 | 对象创建时 | 基础初始化 |
| 属性赋值前 | InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation | 属性注入前 | 修改属性注入行为 |
| 属性赋值 | @Autowired/@Value等 | 依赖注入阶段 | 设置依赖关系 |
| 初始化前 | BeanPostProcessor.postProcessBeforeInitialization | init-method前 | 前置处理 |
| 初始化 | @PostConstruct/InitializingBean | 初始化阶段 | 资源准备 |
| 初始化后 | BeanPostProcessor.postProcessAfterInitialization | init-method后 | 代理包装 |
| 销毁前 | - | 容器关闭时 | - |
| 销毁 | @PreDestroy/DisposableBean | Bean销毁时 | 资源释放 |
1.1 核心阶段详解
实例化阶段是生命周期的起点。Spring通过反射调用构造函数创建Bean实例。此时对象处于"半成品"状态,依赖尚未注入。
