PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors 代码太长就不贴出来了,请读者自行对着源码看吧。这个函数的作用,顾名思义,就是调用BeanFactoryPostProcessors(BeanFactory的后置处理器)。 首先我们思考,这个函数应该怎么写:
postProcessBeanFactory
,postProcessBeanFactory
,还要回调postProcessBeanDefinitionRegistry
。BeanDefinitionRegistryPostProcessor.postProcessBeanDefinitionRegistry
都要在所有BeanFactoryPostProcessors.postProcessBeanFactory
之前被回调然后分析代码:
getBeanFactoryPostProcessors()
应该是spring内部设置的,也就是spring设置的BeanFactoryPostProcessor。if (processedBeans.contains(ppName))
排除掉第一个阶
段调用的BeanDefinitionRegistryPostProcessor)。代码中,当if (beanFactory instanceof BeanDefinitionRegistry)
成立时,会有1次for循环调用registryProcessor.postProcessBeanDefinitionRegistry(registry);
,3次invokeBeanDefinitionRegistryPostProcessors调用(2个单次调用和1个循环调用),然后是5次invokeBeanFactoryPostProcessors调用。它们的含义如下(以下BeanDefinitionRegistryPostProcessor简称注册注册后置器,非BeanDefinitionRegistryPostProcessor的BeanFactoryPostProcessor,简称工厂后置器):
1-4会调用BeanDefinitionRegistryPostProcessor的回调 5-9会调用关于BeanFactoryPostProcessor的回调