一个Bean从建立到销毁,会经历几个阶段,如果使用BeanFactory或ApplicationContext来生成、管理Bean,会尽量支持以下的生命周期:
1、Bean的建立
由BeanFactory读取Bean定义文件,并生成Bean的实例。
2、属性注入
执行相关的Bean配置依赖注入。
3、BeanNameAware的setBeanName()
如果Bean实现了org.springframework.beans.factory.BeanNameAware接口,则执行它的setBeanName()方法。
4、BeanFactoryAware的setBeanFactory()
如果Bean实现了org.springframework.beans.factory.BeanFactoryAware接口,则执行它的setBeanFactory()方法。
5、ApplicationContextAware的setApplicationContext()
如果Bean是由ApplicationContext生成的,且实现了org.springframework.context.ApplicationContextAware接口,则执行它的setApplicationContext()方法。
6、BeanPostProcessors的postProcessBeforeInitialization()
如果Bean定义文件中有定义任何实现了org.springframework.beans.factory.config.BeanPostProcessors接口的实例,在执行BeanPostProcessors实例的postProcessBeforeInitialization()方法。
7、InitializingBean的afterPropertiesSet()
如果Bean实现了org.springframework.beans.factory.IntializingBean,则执行它的afterPropertiesSet()方法。
8、Bean定义文件中定义init-method
如果Bean定义中使用了init-method属性,例如:
<bean id="bean1" class="com.savage" init-method="init">
那么会在这个阶段执行init()方法。
9、BeanPostProcessors的postProcessAfterInitialization()
如果Bean定义文件中有定义任何实现了 org.springframework.beans.factory.config.BeanPostProcessors接口的实例,在执行 BeanPostProcessors实例的postProcessAfterInitialization()方法。
10、DisposableBean的destroy()
在容器关闭时,如果Bean类有实现org.springframework.beans.factory.DisposableBean接口,则执行它的destroy()方法。
11、Bean定义文件中定义destroy-method
在容器关闭时,如果Bean定义中有destroy-method属性,例如:</bean>
<bean id="bean1" class="com.savage" init-method="init"><bean id="bean1" class="com.savage" destroy-method="destroy"> 那么会在这个阶段执行destroy()方法。</bean></bean>
1、Bean的建立
由BeanFactory读取Bean定义文件,并生成Bean的实例。
2、属性注入
执行相关的Bean配置依赖注入。
3、BeanNameAware的setBeanName()
如果Bean实现了org.springframework.beans.factory.BeanNameAware接口,则执行它的setBeanName()方法。
4、BeanFactoryAware的setBeanFactory()
如果Bean实现了org.springframework.beans.factory.BeanFactoryAware接口,则执行它的setBeanFactory()方法。
5、ApplicationContextAware的setApplicationContext()
如果Bean是由ApplicationContext生成的,且实现了org.springframework.context.ApplicationContextAware接口,则执行它的setApplicationContext()方法。
6、BeanPostProcessors的postProcessBeforeInitialization()
如果Bean定义文件中有定义任何实现了org.springframework.beans.factory.config.BeanPostProcessors接口的实例,在执行BeanPostProcessors实例的postProcessBeforeInitialization()方法。
7、InitializingBean的afterPropertiesSet()
如果Bean实现了org.springframework.beans.factory.IntializingBean,则执行它的afterPropertiesSet()方法。
8、Bean定义文件中定义init-method
如果Bean定义中使用了init-method属性,例如:
<bean init-method="init" class="com.savage.HelloBean" id="hello"> </bean>
xml 代码
- <bean id="hello" class="com.savage.HelloBean" init-method="init"/>
那么会在这个阶段执行init()方法。
9、BeanPostProcessors的postProcessAfterInitialization()
如果Bean定义文件中有定义任何实现了 org.springframework.beans.factory.config.BeanPostProcessors接口的实例,在执行 BeanPostProcessors实例的postProcessAfterInitialization()方法。
10、DisposableBean的destroy()
在容器关闭时,如果Bean类有实现org.springframework.beans.factory.DisposableBean接口,则执行它的destroy()方法。
11、Bean定义文件中定义destroy-method
在容器关闭时,如果Bean定义中有destroy-method属性,例如:</bean>
xml 代码
- <bean id="hello" class="com.savage.HelloBean" destroy-method="destroy"/>
<bean destroy-method="destroy" class="com.savage.HelloBean" id="hello"> </bean>
<bean id="bean1" class="com.savage" init-method="init"><bean id="bean1" class="com.savage" destroy-method="destroy"> 那么会在这个阶段执行destroy()方法。</bean></bean>