生命周期图如下:
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
参考: