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接口

    

    配置片段:

    <bean id="steelAxe" class="xxx.xxx.SteelAxe" />

    

    <!-- Chinese类还实现了InitializingBean 接口 -->

    <bean id="chinese" class="xxx.xxx.Chinese" init-method="init">

      <!-- 设置注入 -->

      <property name="axe" ref="steelAxe" />

      <property name="name" value="依赖注入的值" />  

    </bean>

    

    <!-- 配置bean的后处理器可以无需指定id,但这里还是指定了 -->

    <bean id="beanPostProcessor" class="xxx.xxx.MyBeanPostProcessor" />

    

    几种方法的调用顺序:

    (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属性来控制容器后处理器的执行次序。

    

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值