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;

}
上一篇 下一篇

猜你喜欢

热点阅读