图解BeanPostProcessor注册

spring学习之源码分析--AbstractApplicationContext之refresh也提过了这个接口,这里用图解的方式重新看看这个接口。需要注意的是,在registerBeanPostProcessors中仅是注册,实际调用在getBean中。
大体流程和BeanFactoryPostProcessor是一样的,只是这里多了一个MergedBeanDefinitionPostProcessor接口。

PriorityOrdered

首先是PriorityOrdered排序后,加入BeanPostProcessor的list中。这里加入的,也有是MergedBeanDefinitionPostProcessor的实现类。
image.png

Ordered

然后是Ordered排序后,加入BeanPostProcessor的list中,这里也有MergedBeanDefinitionPostProcessor的实现类。
image.png

普通

这里是普通的,排序后,加入BeanPostProcessor的list中,这里也有MergedBeanDefinitionPostProcessor的实现类。
image.png

MergedBeanDefinitionPostProcessor

最后加入MergedBeanDefinitionPostProcessor,那是不是会和之前的重复呢?
其实他每次加入beanFactory的时候,都会移除当前的PostProcessor,然后再加入。
移除的时候:
image.png
重新加入的时候:
image.png
这样,MergedBeanDefinitionPostProcessor的子类就放入了list的末尾。

你可能感兴趣的:(javaspring源码分析)