生命周期圖如下:
Bean的完整生命周期經歷了各種方法調用,這些方法可以划分為以下幾類:
- Bean自身的方法 : 這個包括了Bean本身調用的方法和通過配置文件中<bean>的init-method和destroy-method指定的方法
- Bean級生命周期接口方法 : 這個包括了BeanNameAware、BeanFactoryAware、InitializingBean和DiposableBean這些接口的方法
- 容器級生命周期接口方法 : 這個包括了InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 這兩個接口實現,一般稱它們的實現類為“后處理器”。
- 工廠后處理器接口方法 : 這個包括了AspectJWeavingEnabler, ConfigurationClassPostProcessor, CustomAutowireConfigurer等等非常有用的工廠后處理器 接口的方法。工廠后處理器也是容器級的。在應用上下文裝配配置文件之后立即調用。
以dubbo的ServiceBean為例,它實現了下面接口:
public class ServiceBean<T> extends ServiceConfig<T> implements InitializingBean, DisposableBean, ApplicationContextAware, ApplicationListener, BeanNameAware
1、InitializingBean
Spring 在設置完一個bean所有的屬性后,會檢查bean是否實現了InitializingBean接口,如果實現就調用bean的 afterPropertiesSet方法。另外,如果bean是單例的,則afterPropertiesSet方法只會被調用一次;否則每次創建 bean時afterPropertiesSet方法都會被重新調用.
參考: http://essay.iteye.com/blog/1775229
2、DisposableBean
DisposableBean就是在一個bean被銷毀的時候,spring容器會幫你自動執行這個方法。
參考: http://www.cnblogs.com/zr520/p/4894554.html
3、ApplicationContextAware
其實我們看到---Aware就知道是干嘛用的了,就是屬性注入的,但是這個ApplicationContextAware的不同地方在於,實現了這個接口的bean,當spring容器初始化的時候,會自動的將ApplicationContext注入進來。
加載Spring配置文件時,如果Spring配置文件中所定義的Bean類實現了ApplicationContextAware 接口,那么在加載Spring配置文件時,會自動調用ApplicationContextAware 接口中的
public void setApplicationContext(ApplicationContext context) throws BeansException
方法,獲得ApplicationContext 對象。
參考:http://uule.iteye.com/blog/821712
4、ApplicationListener
如果在上下文中部署一個實現了ApplicationListener接口的bean,
那么每當在一個ApplicationEvent發布到 ApplicationContext時,
這個bean得到通知。其實這就是標准的Oberver設計模式。
參考:http://blog.csdn.net/ilovejava_2010/article/details/7953419
5、BeanNameAware
讓Bean獲取自己在BeanFactory配置中的名字(根據情況是id或者name)。
通過實現BeanNameAware接口,接口中就一個方法setBeanName()
參考: http://langgufu.iteye.com/blog/1499966
參考:

