Spring Bean 生命周期流程图
+------------------------------------------------------+
| 开始 |
+------------------------------------------------------+
|
v
+------------------------------------------------------+
| 加载配置元数据 |
| (XML, 注解, Java 配置类) |
+------------------------------------------------------+
|
v
+------------------------------------------------------+
| 解析 Bean 定义 |
| (注册到 BeanDefinitionRegistry) |
+------------------------------------------------------+
|
v
+------------------------------------------------------+
| 实例化 Bean |
| (通过构造函数或工厂方法创建实例) |
+------------------------------------------------------+
|
v
+------------------------------------------------------+
| 属性填充 |
| (依赖注入: 构造函数注入、setter 方法注入等) |
+------------------------------------------------------+
|
v
+------------------------------------------------------+
| 初始化前操作 |
| (Aware 接口回调: BeanNameAware, BeanFactoryAware 等)|
+------------------------------------------------------+
|
v
+------------------------------------------------------+
| 初始化方法调用 |
| (@PostConstruct 注解方法, 或者 init-method 指定的方法)|
+------------------------------------------------------+
|
v
+------------------------------------------------------+
| 后置处理器后处理 |
| (BeanPostProcessor.postProcessAfterInitialization) |
+------------------------------------------------------+
|
v
+------------------------------------------------------+
| 使用 Bean |
| (Bean 可供应用程序使用) |
+------------------------------------------------------+
|
v
+------------------------------------------------------+
| 销毁前操作 |
| (@PreDestroy 注解方法, 或者 destroy-method 指定的方法)|
+------------------------------------------------------+
|
v
+------------------------------------------------------+
| 销毁 Bean |
| (容器关闭时销毁单例 Bean) |
+------------------------------------------------------+
|
v
+------------------------------------------------------+
| 结束 |
+------------------------------------------------------+
详细说明
-
加载配置元数据:
- Spring 容器从 XML 文件、注解或 Java 配置类中加载 Bean 的定义信息。
-
解析 Bean 定义:
- 将加载的配置信息解析为
BeanDefinition
对象,并注册到BeanDefinitionRegistry
中。
- 将加载的配置信息解析为
-
实例化 Bean:
- 根据
BeanDefinition
中的信息,通过构造函数或工厂方法创建 Bean 实例。
- 根据
-
属性填充(依赖注入):
- 设置 Bean 的属性值和依赖关系。这可以通过构造函数注入、setter 方法注入或字段注入实现。
-
初始化前操作:
- 如果 Bean 实现了特定的
Aware
接口(如BeanNameAware
,BeanFactoryAware
),则调用相应的方法。
- 如果 Bean 实现了特定的
-
初始化方法调用:
- 调用 Bean 上标注的
@PostConstruct
注解方法,或者在配置中指定的init-method
方法。
- 调用 Bean 上标注的
-
后置处理器后处理:
- 如果有注册的
BeanPostProcessor
,则调用其postProcessAfterInitialization
方法。
- 如果有注册的
-
使用 Bean:
- 此时 Bean 已经完全初始化并准备好被应用程序使用。
-
销毁前操作:
- 当容器关闭时,如果 Bean 实现了
DisposableBean
接口,或者配置了destroy-method
,则调用相应的销毁方法。
- 当容器关闭时,如果 Bean 实现了
-
销毁 Bean:
- 对于单例 Bean,Spring 容器会在关闭时销毁它们。
流程图解释
- 开始:整个生命周期的起点。
- 加载配置元数据:读取并解析配置文件或注解。
- 解析 Bean 定义:将配置信息转换为内部表示形式。
- 实例化 Bean:根据定义创建对象实例。
- 属性填充:设置 Bean 的属性和依赖。
- 初始化前操作:执行一些特殊的回调方法。
- 初始化方法调用:调用初始化方法。
- 后置处理器后处理:允许对 Bean 进行额外的处理。
- 使用 Bean:Bean 准备好被应用程序使用。
- 销毁前操作:准备销毁 Bean 前的清理工作。
- 销毁 Bean:释放资源,清理状态。
- 结束:生命周期的终点。