BeanFactoryPostProcessor和BeanPostProcessor

Spring提供了两种PostProcessor(后置处理)bean的扩展接口,分别为BeanPostProcessor和BeanFactoryPostProcessor 

1.BeanFactoryPostProcessor:是针对于beanFactory的扩展点,即spring会在beanFactory初始化之后,beanDefinition都已经loaded,但是bean还未创建前进行调用,可以修改,增加beanDefinition

public interface BeanFactoryPostProcessor {
    void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException;
}

此接口只提供了一个方法,方法参数为ConfigurableListableBeanFactory 

 

2.BeanPostProcessor:是针对bean的扩展点,即spring会在bean初始化前后 调用方法对bean进行处理

public interface BeanPostProcessor {
  Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException
  Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException
}

接口提供了两个方法,分别是初始化前和初始化后执行方法,如果定义一个类实现了BeanPostProcessor,默认是会对整个Spring容器中所有的bean进行处理。
可以根据第二个参数beanName 来确认我们将要处理的具体的bean。
这个的处理是发生在Spring容器的实例化和依赖注入之后。

在bean实例化之前,首先执行BeanFactoryPostProcessor实现类的方法,然后通过调用bean的无参构造函数实例化bean,并调用set方法注入属性值。bean实例化后,执行初始化操作,调用两个初始化方法(两个初始化方法的顺序:先执行afterPropertiesSet,再执行init-method)前后,执行了BeanPostProcessor实现类的两个方法

3.BeanDefinitionRegistryPostProcessor是BeanFactoryPostProcessor的子接口:是针对于beanFactory的扩展点,即spring会在调用BeanFactoryPostProcessor之前调用他。

4.InstantiationAwareBeanPostProcessor是BeanPostProcessor的子接口:是针对于bean的扩展点,即spring会在bean实例化前后进行调用

5.SmartInstantiationAwareBeanPostProcessor是InstantiationAwareBeanPostProcessor的子接口:是针对于bean的扩展点,预测已处理bean的最终类型,或者觉得bean实例化需要的构造函数,或者获取早期的bean

6.MergedBeanDefinitionPostProcessor是BeanPostProcessor的子接口:是针对于bean的扩展点,即spring会处理某个给定的beanDefinition于原本的bean进行merged

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值