BeanDefinitionRegistryPostProcessor原理
BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor
1、比BeanFactoryPostProcessor多一个额外定义的新方法:postProcessBeanDefinitionRegistry();
-
该方法在所有bean定义信息将要被加载,bean实例还未创建的时候执行
-
优先于BeanFactoryPostProcessor(所有bean定义信息被加载完成,bean实例创建之前)执行;
-
因此可以利用BeanDefinitionRegistryPostProcessor给容器中再额外添加一些组件;
2、原理:
-
ioc创建对象
-
refresh()中调用invokeBeanFactoryPostProcessors(beanFactory);
-
从容器中获取到所有的BeanDefinitionRegistryPostProcessor组件。
-
先执行所有的postProcessBeanDefinitionRegistry()方法
-
再执行postProcessBeanFactory()方法(该方法在BeanFactoryPostProcessor中定义)
-
-
再来从容器中找到BeanFactoryPostProcessor组件
- 然后依次执行postProcessBeanFactory()方法