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 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 填充属性(依赖注入):将其他 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 创建后即交由使用者负责,容器不再管理其销毁。

















