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的调用过程,源码之前剖析了这里就不做剖析,你在理论生成中有用到这个接口吗,欢送评论区探讨。