Spring Bean 在容器的生命周期是什么样的?
Spring Bean 的初始化流程如下:
实例化 Bean 对象
Spring 容器根据配置中的 Bean Definition(定义)中实例化 Bean 对象。
Bean Definition 可以通过 XML,Java 注解或 Java Config 代码提供。
Spring 使用依赖注入填充所有属性,如 Bean 中所定义的配置。
- Aware 相关的属性,注入到 Bean 对象
- 如果 Bean 实现 BeanNameAware 接口,则工厂通过传递 Bean 的 beanName 来调用
#setBeanName(String name)
方法。 - 如果 Bean 实现 BeanFactoryAware 接口,工厂通过传递自身的实例来调用
#setBeanFactory(BeanFactory beanFactory)
方法。
- 如果 Bean 实现 BeanNameAware 接口,则工厂通过传递 Bean 的 beanName 来调用
- 调用相应的方法,进一步初始化 Bean 对象
- 如果存在与 Bean 关联的任何 BeanPostProcessor 们,则调用
#preProcessBeforeInitialization(Object bean, String beanName)
方法。 - 如果 Bean 实现 InitializingBean 接口,则会调用
#afterPropertiesSet()
方法。 - 如果为 Bean 指定了 init 方法(例如
<bean />
的init-method
属性),那么将调用该方法。 - 如果存在与 Bean 关联的任何 BeanPostProcessor 们,则将调用
#postProcessAfterInitialization(Object bean, String beanName)
方法。
- 如果存在与 Bean 关联的任何 BeanPostProcessor 们,则调用
Spring Bean 的销毁流程如下:
- 如果 Bean 实现 DisposableBean 接口,当 spring 容器关闭时,会调用
#destroy()
方法。 - 如果为 bean 指定了 destroy 方法(例如
<bean />
的destroy-method
属性),那么将调用该方法。
整体如下图:
Spring实现Aware接口 https://www.jianshu.com/p/7ce88398cf78
InitializingBean的作用 https://blog.csdn.net/maclaren001/article/details/37039749
Spring 的 BeanPostProcessor 原理剖析及使用 https://www.jianshu.com/p/58d2bddcb871
写代码简单比较init-method,afterPropertiesSet和BeanPostProcessor https://www.2cto.com/kf/201310/251778.html
相关推荐
横云断岭 2020-06-11
横云断岭 2020-05-26
咻pur慢 2020-04-29
杜鲁门 2020-11-05
与卿画眉共浮生 2020-10-14
lukezhong 2020-10-14
tangxiong0 2020-09-03
YangHuiLiang 2020-08-06
Sweetdream 2020-08-03
编程点滴 2020-07-29
smalllove 2020-07-27
iconhot 2020-07-05
XGQ 2020-07-04
MicroBoy 2020-07-04
itjavashuai 2020-07-04
zmysna 2020-07-04
willluckysmile 2020-06-29
CoderBoy 2020-06-28
爱莲说 2020-06-26