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