Spring 备忘 (四) -- Spring 后处理器

Spring 备忘 (四) -- Spring 后处理器

 

20. Spring 后处理器 - Bean 后处理器

    bean后处理器,是一种特殊的bean,这种bean不对外提供服务,甚至无需id属性,

    负责对其容器中其他bean提供后处理.

    

    这种bean是对所有的(或一大批)其他bean进行处理,

    区别于:

      bean单独配置init-method或者实现InitializingBean(仅仅对当前的bean做处理)

      bean单独配置destory-method属性 或者 实现 DisposableBean接口(仅仅对当前的bean做处理)

    

    bean后处理器必须实现 BeanPostProcessor接口,包含下面方法:

    Object postProcessBeforeInitialization(Object bean,String name) Throws BeansException

    Object postProcessAfterInitialization(Object bean,String name) Throws BeansException

    第一个参数是即将进行后处理的bean实例,第二个参数是该bean的名字

    这两个方法会在bean初始化前,后分别被调用

    一个类MyBeanPostProcessor实现了BeanPostProcessor接口

    

    配置片段:

   

    

   

   

     

     

       

   

    

   

   

    

    几种方法的调用顺序:

    (1) 注入依赖关系(set方法之类的)

    (2) 调用后处理器接口方法 postProcessBeforeInitialization

    (3) 调用具体Bean的InitializingBean接口方法afterPropertiesSet()

    (4) bean配置的init-method中指定的方法

    (5) 调用具体Bean的DisposableBean接口方法destroy()

    (6) 调用bean配置的destroy-method中指定的方法(P599)

    (7) 调用Bean后处理器接口的 postProcessAfterInitialization(P616)

    

    

    使用BeanFactory作为Spring容器需要手动注册Bean后处理器,

    使用ApplicationContext则会自动注册Bean后处理器.

    

21. Spring 后处理器 -- 容器 后处理器

    

    容器后处理器处理容器本身.

    实现BeanFactoryPostProcessor接口,方法为:

    postProcessorBeanFactory(ConfigurableListableBanFactory beanFactory)

    该方法对Spring容器进行后处理,并不完全替换容器,所以不需要返回值.

    

    使用BeanFactory作为Spring容器需要手动注册 容器 后处理器,

    使用ApplicationContext则会自动注册 容器 后处理器.

    

    配置: 将 容器 后处理器,作为普通bean 配置到xml配置文件中.(P618)

    

    两种容器配置器(P620):

      属性占位符配置器(PropertyPlaceholderConfigurer)

      重写占位符配置器(PropertyOverrideConfigurer)

    

    参考: http://blog.csdn.net/confirmaname/article/details/9466055

 

程序会自动搜索容器中实现了BeanFactoryPostProcessor接口的类,并将它注册成容器后处理器。

Spring已经提供了如下几个常用的容器后处理器:

① PropertyPlaceholderConfigurer:属性占位符配置器。

② PropertyOverrideConfigurer:重写占位符配置器。

 CustomAutowireConfigurer:自定义自动装配的配置器。

 CustomScopeConfigurer:自定义作用域的配置器。

从上面的介绍可以看出,容器后处理器通常用于对Spring容器进行处理,并且总是在容器实例化任何其他的Bean之前,读取配置文件的元数据,并有可能修改这些元数据。

如果有需要,程序可以配置多个容器后处理器,多个容器后处理器可设置order属性来控制容器后处理器的执行次序。

    

  

你可能感兴趣的:(Spring)