前言
在Spring中,从Spring IOC容器中取得的bean实例为单例,这个bean的生命周期就是容器管理的,一般担当管理者角色的是BeanFactory或者ApplicationContext。认识Bean的生命周期活动,对于更好的理解它有很大的帮助。
下面以BeanFactory为例,说明一个bean的生命周期
- 1. Bean的建立
容器寻找Bean的定义信息并将其实例化
- 2.属性注入
使用依赖注入,Spring按照Bean定义信息配置Bean所有属性
- 3.BeanNameAware的setBeanName()
如果Bean类实现BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的id。
- 4.BeanFactoryAware的setBeanFactory()
如果Bean类实现BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身
- 5.BeanPostProcessor的postProcessBeforeIntialization()
如果bean和BeanPostProcessor关联,那么其postProcessBeforeIntialization()方法将被调用
- 6.InitializingBean的afterPropertiesSet()
如果Bean类已实现InitializingBean接口,则执行他的afterProPertiesSet()方法
- 7.Bean定义文件中定义init-method
可以在Bean定义文件中使用"init-method"属性设定方法名称
<bean id="demoBean" class="com.yangsq.bean.DemoBean" init-method="initMethod">
.......
</bean>
- 8.BeanPostProcessor的postProcessAfterInitialization()
如果有任何的BeanPostProcessors实例与Bean实例关联,则执行BeanPostProcessors实例的ProcessaAfterInitialization()方法
- 9. 此时,Bean已经可以被应用系统使用了
- 10. DisposableBean的destroy()
在容器关闭时,如果Bean类实现了org.springframework.beans.factory.DisposableBean接口,则执行它的destroy()方法。
- 11 Bean定义文件中定义destroy-method
在容器关闭时,可以在Bean定义文件中使用“destory-method”定义的方法
< bean id="demoBean" class="com.yangsq.bean.DemoBean" destory-method="destroyMethod">
.......
</bean>