
- 实例化 Instantiation
- 属性赋值 Populate
- 初始化 Initialization
- 销毁 Destruction
- Spring容器 从XML 文件中读取bean的定义,并实例化bean。
- Spring根据bean的定义填充所有的属性。
- 如果bean实现了BeanNameAware 接口,Spring 传递bean 的ID 到 setBeanName方法。
- 如果Bean 实现了 BeanFactoryAware 接口, Spring传递beanfactory 给setBeanFactory 方法。
- 如果有任何与bean相关联的BeanPostProcessors,Spring会在postProcesserBeforeInitialization()方法内调用它们。
- 如果bean实现IntializingBean了,调用它的afterPropertySet方法,如果bean声明了初始化方法,调用此初始化方法。
- 如果有BeanPostProcessors 和bean 关联,这些bean的postProcessAfterInitialization() 方法将被调用。
- 如果bean实现了 DisposableBean,它将调用destroy()方法
1、实例化对象--根据配置中的BeanDefinition实例化bean对象。
2、设置bean相关的属性。
3、检查Aware相关接口并设置相关依赖
比如BeanNameAware这个接口,可以让bean感知到自身在spring容器中的id。
其他的Aware接口也是类似功能,可以让bean感知到自身的一些属性。
4、BeanPostProcessor前置处理。
在bean初始化前加一些自己想要做的逻辑。postProcessBeforeInitialization这个方法
5、BeanPostProcessor后置处理。
在bean初始化后加一些自己想要做的逻辑。postProcessAfterInitialization这个方法
6、bean 对象处于就绪状态,可以使用了。
7、销毁bean
1、是否实现了DisposableBean接口,spring容器关闭会调用destory方法。
2、是否配置自定义的destory方法销毁
参考
https://www.jianshu.com/p/1dec08d290c1
https://www.cnblogs.com/lkylin/p/12720552.html