文章内容收录到个人网站,方便阅读: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 生命周期管理,可以通过不同的钩子和配置来满足应用的需求。













![[网络安全]sqli-labs Less-3 解题详析](https://img-blog.csdnimg.cn/4b036559dabe4e0080b2cc07300aa89c.png#pic_center)




