BeanFactoryPostProcessor
之前我们了解过BeanPostProcessor:bean后置处理器,bean创建对象初始化前后进行拦截工作的
而BeanFactoryPostProcessor:是beanFactory的后置处理器;
调用时机:在BeanFactory标准初始化之后调用,这时所有的bean定义已经保存加载到beanFactory,但是bean的实例还未创建
能干什么:来定制和修改BeanFactory的内容,如覆盖或添加属性
原理
1. ioc容器创建对象
org.springframework.context.support.PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors(org.springframework.beans.factory.config.ConfigurableListableBeanFactory, java.util.List<org.springframework.beans.factory.config.BeanFactoryPostProcessor>)
2. invokeBeanFactoryPostProcessors(beanFactory);
如何找到所有的BeanFactoryPostProcessor并执行他们的方法;
String[] postProcessorNames = beanFactory.getBeanNamesForType(BeanFactoryPostProcessor.class, true, false);
2.1 直接在BeanFactory中找到所有类型是BeanFactoryPostProcessor的组件,并执行他们的方法
下面还是区分PriorityOrdered Ordered以及未设置排序
2.2 在初始化创建其他组件前面执行
private static void invokeBeanFactoryPostProcessors( Collection<? extends BeanFactoryPostProcessor> postProcessors, ConfigurableListableBeanFactory beanFactory) { for (BeanFactoryPostProcessor postProcessor : postProcessors) { postProcessor.postProcessBeanFactory(beanFactory); } }
执行每个BeanFactoryPostProcessor的postProcessBeanFactory方法
执行流程图: