文章内容收录到个人网站,方便阅读:http://hardyfish.top/
文章内容收录到个人网站,方便阅读:http://hardyfish.top/
文章内容收录到个人网站,方便阅读:http://hardyfish.top/
Spring Bean 的初始化过程主要可以分为几个阶段,下面是一个概述:
1. 实例化
当 Spring 容器创建一个 Bean 时,首先会通过反射机制调用其构造函数进行实例化。
2. 设置属性
在实例化之后,Spring 会为 Bean 设置属性,这些属性通常来自于配置文件(如 XML、Java 配置或注解)。Spring 会调用所有的 setter 方法来设置 Bean 的属性值。
3. Aware 接口回调
如果 Bean 实现了某些 Aware
接口(如 BeanNameAware
、BeanClassLoaderAware
、BeanFactoryAware
等),Spring 会在设置完属性后调用相应的方法。这些方法允许 Bean 获取一些 Spring 的上下文信息。
4. BeanPostProcessor 的处理
- 前初始化:如果有实现了
BeanPostProcessor
接口的 Bean,Spring 会调用它们的postProcessBeforeInitialization
方法。这可以让开发者在 Bean 初始化前进行一些自定义处理。
5. 初始化方法
初始化方法可以通过以下几种方式定义:
- 实现
InitializingBean
接口的afterPropertiesSet
方法。 - 在 Bean 的类中使用
@PostConstruct
注解标记一个初始化方法。 - 在 XML 配置或 Java 配置中通过
init-method
属性指定一个初始化方法。
6. BeanPostProcessor 的后处理
- 后初始化:在初始化方法执行后,再次调用
BeanPostProcessor
的postProcessAfterInitialization
方法,以允许进行后续处理。
7. Bean 可用
经过上述步骤后,Bean 完全初始化并可以在 Spring 容器中使用。
8. 销毁过程
当容器关闭或 Bean 被销毁时,会调用销毁方法:
- 实现
DisposableBean
接口的destroy
方法。 - 使用
@PreDestroy
注解标记的销毁方法。 - 在 XML 配置或 Java 配置中通过
destroy-method
属性指定的销毁方法。
总结
整个过程可以简化为:
- 实例化 Bean
- 设置属性
- Aware 接口回调
- 前初始化处理(
postProcessBeforeInitialization
) - 执行初始化方法
- 后初始化处理(
postProcessAfterInitialization
) - Bean 可用
- 销毁过程(当需要时)
这种机制使得 Spring 提供了灵活的 Bean 生命周期管理,可以通过不同的钩子和配置来满足应用的需求。