BeanPostProcessor和BeanFactoryPostProcessor

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;

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文章作者:Tyan博客:noahsnail.com | CSDN | 简书 3.8 Container Exten...
    SnailTyan阅读 1,259评论 0 6
  • Spring容器高层视图 Spring 启动时读取应用程序提供的Bean配置信息,并在Spring容器中生成一份相...
    Theriseof阅读 2,869评论 1 24
  • 什么是Spring Spring是一个开源的Java EE开发框架。Spring框架的核心功能可以应用在任何Jav...
    jemmm阅读 16,606评论 1 133
  • 1 梁思华失恋了。 这段感情的无疾而终是大家意料之内的事情,然而让一众好友想不到的是,她竟然崩溃到了要自杀的地步。...
    叶十二月阅读 1,035评论 0 1
  • 缘分这个东西,真的是太过神奇,原本以为从此再无交集的两个人,却能够在某天某个时刻,以一种意想不到的方式重逢。 进入...
    李阿猫阅读 370评论 0 0