【无标题】Spring

BeanFactory的后处理:

BeanFacotry作为Spring中容器功能的基础,⽤
于存放所有已经加载的bean,为了保证程序上的⾼
可扩展性,Spring针对BeanFactory做了⼤量的扩
展,⽐如我们熟知的PostProcessor等都是在这⾥实
现的。

BeanFactoryPostProcessor接⼝跟
BeanPostProcessor类似,可以对bean的定义(配置
元数据)进⾏处理。也就是说,Spring IoC容器允
许BeanFactoryPostProcessor在容器实际实例化任何
其他的bean之前读取配置元数据,并有可能修改
它。如果你愿意,你可以配置多个
BeanFactoryPostProcessor。你还能通过设
置“order”属性来控制BeanFactoryPostProcessor的执
⾏次序(仅当BeanFactoryPostProcessor实现了
Ordered接⼝时你才可以设置此属性,因此在实现
BeanFactoryPostProcessor时,就应当考虑实现
Ordered接⼝)。

如果你想改变实际的bean实例(例如从配置元
数据创建的对象),那么你最好使⽤
BeanPostProcessor。同样地,
BeanFactoryPostProcessor的作⽤域范围是容器级
的。它只和你所使⽤的容器有关。如果你在容器
中定义⼀个BeanFactoryPostProcessor,它仅仅对此
容器中的bean进⾏后置处理。
BeanFactoryPostProcessor不会对定义在另⼀个容器
中的bean进⾏后置处理,即使这两个容器都是在同
⼀层次上。在Spring中存在对于
BeanFactoryPostProcessor的典型应⽤,⽐如
PropertyPlaceholderConfigurer。 

 BeanFactoryProcessor:

  • bean工厂后置处理器核心接口
  • 执行时机: 在bean调用构造函数,init方法,bean后处理器执行之前执行
  • 方法作用: 主要用来对bean定义做一些改变

自定义bean工厂后置处理器

public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        for(String name:beanFactory.getBeanDefinitionNames()) {
            if("lifeCycleBean".equals(name)) {
                log.debug("BeanFactoryPostProcessor-->bean工厂后置处理器>>>>>>> bean定义之后,实例化之前执行");
            }
        }
    }
}

BeanDefinitionRegistryPostProcessor-bean工厂定义注册后置处理器: 

  
BeanFactoryPostProcessor工厂后置处理器子接口
执行时机: 在bean调用构造函数,init方法,bean后处理器执行,BeanFactoryPostProcessor-bean工厂后置处理器之前执行
方法作用: 用来注册更多的bean到spring容器
 

public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        for(String name:beanFactory.getBeanDefinitionNames()) {
            if("lifeCycleBean".equals(name)) {
                log.debug("BeanDefinitionRegistryPostProcessor-->bean工厂后置处理器>>>>>>> bean定义之后,实例化之前执行,对bean做一些改变");
            }
        }
    }

    @Override
    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry beanDefinitionRegistry) throws BeansException {
        for(String name:beanDefinitionRegistry.getBeanDefinitionNames()) {
            if("lifeCycleBean".equals(name)) {
                log.debug("BeanDefinitionRegistryPostProcessor-->bean工厂后置处理器>>>>>>> bean定义之后,实例化之前执行,注册更多的bean到容器");
            }
        }
    }
}

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值