zoukankan      html  css  js  c++  java
  • Spring Bean的生命周期

    生命周期图如下:

    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

  • 相关阅读:
    08.django之中间件
    07.django之Ajax
    05-Informatica_schema获取元数据
    04-数据库连接启动流程mysql初始化配置文件配置多实例初始化配置文件使用
    javascript设计模式-(八)
    javascript设计模式-(七)
    javascript设计模式-(六)
    javascript设计模式-(五)
    javascript设计模式-(四)
    javascript设计模式-(三)
  • 原文地址:https://www.cnblogs.com/ghj1976/p/5383743.html
Copyright © 2011-2022 走看看