共计 1625 个字符,预计需要花费 5 分钟才能阅读完成。
spring 学习之源码剖析 –AbstractApplicationContext 之 refresh 也提过了这个接口,这里用图解的形式从新看看这个接口。他这里有个办法,办法的参数是 ConfigurableListableBeanFactory 类型的。在这里咱们能够剖析和批改 bean 定义以及预实例化单例的工具。
@FunctionalInterface
public 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 的调用过程,源码之前剖析了这里就不做剖析,你在理论生成中有用到这个接口吗,欢送评论区探讨。