spring bean生命周期分为四个阶段:1. beandefinition注册(定义蓝图)、2. 实例化(创建空对象)、3. 初始化(依赖注入、aware回调、初始化方法执行)、4. 销毁(仅单例,容器关闭时清理资源)。

Spring Bean 的生命周期不是简单地“new 一下就完事”,而是由 IoC 容器全程管控的一套标准化流程。对单例 Bean(最常见场景)来说,核心阶段可清晰划分为四个关键环节,每个阶段职责明确、不可替代。
1. BeanDefinition 注册阶段(定义蓝图)
这是整个生命周期的起点,但不涉及对象创建。Spring 启动时会扫描配置(@Configuration、@Component 等)或读取 XML,把每个 Bean 的元信息(类名、作用域、是否懒加载、构造参数、属性值、初始化/销毁方法等)封装成 BeanDefinition 对象,并注册进容器的注册表中。它就像一份“施工图纸”,只描述“要建什么”,还没动工。
2. 实例化阶段(创建空对象)
容器根据 BeanDefinition 中的 class 信息,通过反射调用构造方法(或工厂方法、CGLIB 代理)生成一个原始对象实例。注意:此时对象仅分配了内存、执行了构造逻辑,所有字段仍是默认值(null、0、false),依赖尚未注入,Aware 接口也没被回调。
3. 初始化阶段(赋值 + 回调 + 准备就绪)
这是最复杂、扩展点最多的阶段,严格按顺序执行:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 填充属性(依赖注入):将其他 Bean 或配置值注入到该 Bean 的字段、setter 或构造参数中
- 回调 Aware 接口:如 BeanNameAware、BeanFactoryAware、ApplicationContextAware 等,让 Bean 能感知容器环境
- 执行 BeanPostProcessor.postProcessBeforeInitialization
- 调用初始化方法:依次是 @PostConstruct 方法 → InitializingBean.afterPropertiesSet() → init-method 配置的方法
- 执行 BeanPostProcessor.postProcessAfterInitialization
完成后,Bean 才真正可用,进入“使用中”状态。
4. 销毁阶段(资源清理)
仅对 singleton Bean 有效,且只在容器关闭(如 ApplicationContext.close())时触发。按顺序执行:
- DisposableBean.destroy()
- @PreDestroy 方法
- destroy-method 配置的方法
用于释放连接、关闭线程池、注销监听器等收尾工作。prototype Bean 创建后即交由使用者负责,容器不再管理其销毁。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










