1.Spring BeanPostProcessors
概述
通常,你会发现自己处于这样一种情况,你需要在Spring
框架实例化Bean
执行一些预处理和后处理。Spring
提供了BeanPostProcessor
接口,它定义了一个回调方法来实现这个功能。
实现BeanPostProcessor
接口的类需要在ApplicationContext
(Spring Bean
配置文件)中定义,并将应用于应用程序上下文中定义的所有Bean
。
如果Bean配置文件中配置了多个BeanPostProcessor
实现,并且它们相互依赖(一个实现的处理对象可以是另一个实现的输入)那么BeanPostProcessor
的顺序就很重要。为了控制执行后处理器的顺序,实现BeanPostProcessor
的类需要实现Ordered
接口并实现其getOrder
方法来定义顺序。
BeanPostProcessor
接口为我们提供了两个扩展点:
- 在
Spring Container
实例化对象之后,但在初始化之前执行自定义处理 - 初始化后执行自定义处理。
BeanPostProcessors
对Bean
(或对象)实例进行操作。这意味着Spring IoC
容器实例化一个Bean
实例,然后BeanPostProcessor
接口完成他们的工作。
注意:与Bean
相关的init
和destroy
方法与bean post processors
不同。BeanPostProcessors
对于所有Bean
都很常见,并且在自定义init
方法之前执行。
2.BeanPostProcessor
接口
BeanPostProcessor
接口在org.springframework.beans.factory.config.BeanPostProcessor
包下定义,并有两个回调方法
a)postProcessBeforeInitialization
- 在对象实例化之后但在初始化之前调用此方法。方法的签名是:
public Object postProcessBeforeInitialization(Object bean, String beanName)
throwsBeansException
b)postProcessAfterInitialization
- 在对象初始化后调用此方法。方法的签名是:
public Object postProcessAfterInitialization(Object bean, String beanName)
throwsBeansException