BeanPostProcessor和BeanFactoryPos
2018-04-23 本文已影响0人
coderlan
BeanFactoryPostProcessor
Spring IoC容器允许BeanFactoryPostProcessor在容器实例化任何bean之前读取bean的定义(配置元数据),并可以修改它。同时可以定义多个BeanFactoryPostProcessor,通过设置'order'属性来确定各个BeanFactoryPostProcessor执行顺序。
注册一个BeanFactoryPostProcessor实例需要定义一个Java类来实现BeanFactoryPostProcessor接口,并重写该接口的postProcessorBeanFactory方法。通过beanFactory可以获取bean的定义信息,并可以修改bean的定义信息。
public interface BeanFactoryPostProcessor {
/**
* 参数是beanFactory,这时候可以从beanFactory取出自己感兴趣的BeanDefinition,做修改。这时候Bean还没实例化的。
*/
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}
BeanPostProcessor
如果我们想在Spring容器中完成bean实例化、配置以及其他初始化方法前后要添加一些自己逻辑处理。我们需要定义一个或多个BeanPostProcessor接口实现类,然后注册到Spring IoC容器中。
public interface BeanPostProcessor {
/**
* 在bean初始化之前执行(比如InitializingBean的afterPropertiesSet方法或者自定义的初始化方法)。返回最终使用的Bean对象(可以做自定义处理,比如包装原先的Bean实例)
*/
Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;
/**
* 在bean初始化之后执行(比如InitializingBean的afterPropertiesSet方法或者自定义的初始化方法)。返回最终使用的Bean对象(可以做自定义处理,比如包装原先的Bean实例)
*/
Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
}