spring学习之源码剖析--AbstractApplicationContext之refresh也提过了这个接口,这里用图解的形式从新看看这个接口。他这里有个办法,办法的参数是ConfigurableListableBeanFactory类型的。在这里咱们能够剖析和批改bean定义以及预实例化单例的工具。

@FunctionalInterfacepublic interface BeanFactoryPostProcessor {    void postProcessBeanFactory(ConfigurableListableBeanFactory var1) throws BeansException;}

另外,还有一个接口,BeanDefinitionRegistryPostProcessor,继承了BeanFactoryPostProcessor接口,咱们看看他的办法的参数,是BeanDefinitionRegistry类型的,在这里咱们能够注册bean、移除bean等。

public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor {    void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry var1) throws BeansException;}

在refresh调用invokeBeanFactoryPostProcessors办法的时候,其实就是对下面两个接口的实现类的解决。

BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry

首先执行的是BeanDefinitionRegistryPostProcessor的postProcessBeanDefinitionRegistry办法,他的程序如下:

  • 先调用继承了BeanDefinitionRegistryPostProcessor以及PriorityOrdered的子类,如果有多个实现了PriorityOrdered接口的类,那看order小的先执行。
  • 再调用继承了BeanDefinitionRegistryPostProcessor以及Ordered的子类,如果有多个实现了Ordered接口的类,那看order小的先执行。
  • 最初调用继承了BeanDefinitionRegistryPostProcessor的子类。

BeanDefinitionRegistryPostProcessor#postProcessBeanFactory

而后执行BeanDefinitionRegistryPostProcessor的postProcessBeanFactory办法,他的程序同上。

BeanFactoryPostProcessor#postProcessBeanFactory

BeanDefinitionRegistryPostProcessor的子类执行实现后,这个时候才到BeanFactoryPostProcessor的子类执行postProcessBeanFactory办法,他的程序如下:

  • 先调用继承了BeanFactoryPostProcessor以及PriorityOrdered的子类,如果有多个实现了PriorityOrdered接口的类,那看order小的先执行。
  • 再调用继承了BeanFactoryPostProcessor以及Ordered的子类,如果有多个实现了Ordered接口的类,那看order小的先执行。
  • 最初调用继承了BeanFactoryPostProcessor的子类。


以上就是BeanFactoryPostProcessor的调用过程,源码之前剖析了这里就不做剖析,你在理论生成中有用到这个接口吗,欢送评论区探讨。