BeanFactoryPostProcessor执行流程
2021-08-04 22:12:46 4 举报
Spring的BeanFactoryPostProcessor执行流程
作者其他创作
大纲/内容
是
总体的流程严格按照先执行子类的方法,子类方法执行完再执行父类的方法先执行实现了PriorityOrdered接口再执行Ordered接口的,最后执行无序的
false
ConfignatureClassPostProcesstor
否
sortPostProcessors对所有的BDRPP进行排序
beanFactory.getBeanNamesForType获取容器中已经存在的BeanFactoryPostProcessor类型的BeanDefintion
registryProcessor.postProcessBeanDefinitionRegistry执行BDRPP的方法,该方法可能会新增BFPP
beanFactory.getBeanNamesForType获取容器中已经存在的BeanDefinitionRegistryPostProcessor类型的BeanDefintion
invokeBeanFactoryPostProcessors
getBeanFactoryPostProcessors()容器启动时已经注册的BFPP
List<BeanFactoryPostProcessor> priorityOrderedPostProcessors存放实现了PriorityOrdered接口的BeanFactoryPostProcessor
并放入
BeanFactoryPostProcesstor处理过程
是否是实现了PriorityOrdered的BFPP
是否实现了PriorityOrdered接口
继承
Set<String> processedBeans = new HashSet<>()已经处理过的BFPP
是否实现了Ordered接口
BeanDefintionRegisterPostProcesstor处理流程
processedBeans.contains(ppName)
BeanDefintionRegisterPostProcesstor
registryProcessors.addAll(currentRegistryProcessors)加入BFPP的集合中,等待一起执行
processedBeans.add(ppName)添加到已处理的集合中
List<BeanFactoryPostProcessor> regularPostProcessors存放BeanFactoryPostProcessor的集合
processedBeans.contains(ppName)之前是否已经处理过
默认没有,可以通过继承ClassPathXmlApplicationContext重写里面的方法来添加
PriorityOrdered
List<BeanFactoryPostProcessor> orderedPostProcessorNames存放实现了Ordered接口的BeanFactoryPostProcessor
invokeBeanDefinitionRegistryPostProcessors执行BDRPP的postProcessBeanDefinitionRegistry
如果beanFactory不归属于BeanDefinitionRegistry类型,那么直接执行postProcessBeanFactory方法
List<BeanFactoryPostProcessor> nonOrderedPostProcessorNames存放未实现排序接口的BeanFactoryPostProcessor
没有实现排序接口的BFPP
currentRegistryProcessors.add添加到当前待执行的集合中
reiterate = false标记让循环退出
BeanFactoryPostProcesstor
reiterate控制循环查找是否继续的变量
invokeBeanFactoryPostProcessors三个集合依次执行BFPP的postProcesstorBeanFactory
reiterate = true循环查找继续
是否继承BeanDefinitionRegistryPostProcessor
直接加入
currentRegistryProcessors.clear()执行完后清空本次处理的BDRPP
Ordered
是否是实现了Ordered的BFPP
beanFactory是否继承BeanDefinitionRegistry
List<BeanDefinitionRegistryPostProcessor> currentRegistryProcessors用于保存本次要执行的BeanDefinitionRegistryPostProcessor
List<BeanDefinitionRegistryPostProcessor> registryProcessors存放BeanDefintionRegisttyPostProcessor的集合
收藏
收藏
0 条评论
回复 删除
下一页