导航

Spring Bean的生命周期

Posted on 2016-04-12 18:24  蝈蝈俊  阅读(3229)  评论(0编辑  收藏  举报

生命周期图如下:

image

 

 

 

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

 

 

参考:

http://www.cnblogs.com/zrtqsk/p/3735273.html