invokeBeanFactoryPostProcessors详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了invokeBeanFactoryPostProcessors详解相关的知识,希望对你有一定的参考价值。

参考技术A invokeBeanFactoryPostProcessors该方法会实例化所有BeanDefinitionRegistryPostProcessor和BeanFactoryPostProcessor的实例并且执行postProcessBeanFactory与postProcessBeanDefinitionRegistry方法。

BeanDefinitionRegistryPostProcessor:该接口继承了BeanFactoryPostProcessor。

所以实现该接口需要重写两个方法postProcessBeanFactory与postProcessBeanDefinitionRegistry。

postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry)该方法参数为BeanDefinitionRegistry该接口提供了对BeanDefinition的操作。
postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)该方法提供了对BeanFactory的操作。

在读invokeBeanFactoryPostProcessors方法之前,先梳理一下BeanFactoryPostProcessor执行流程:外部BeanDefinitionRegistryPostProcessor-->实现了PriorityOrdered的BeanDefinitionRegistryPostProcessor-->实现了Ordered的BeanDefinitionRegistryPostProcessor-->无排序的BeanDefinitionRegistryPostProcessor-->调用BeanDefinitionRegistryPostProcessor#postProcessBeanFactory-->外部BeanFactoryPostProcessor-->实现了PriorityOrdered的BeanFactoryPostProcessor-->实现了Ordered的BeanFactoryPostProcessor-->无排序的BeanFactoryPostProcessor

在上面方法中可以发现Spring重复多次获取了BeanDefinitionRegistryPostProcessor的BeanNames而后续处理BeanFactoryPostProcessor时候并没有重复获取,为什么呢?
原因是BeanDefinitionRegistryPostProcessor提供的方法是操作BeanDefinition的,而在这个方法中是可以再次注册BeanDefinitionRegistryPostProcessor/BeanFactoryPostProcessor的。而BeanFactoryPostProcessor并没有提供方式注册。

以上是关于invokeBeanFactoryPostProcessors详解的主要内容,如果未能解决你的问题,请参考以下文章