//处理实现了 ordered的后置处理器
for (String ppName : orderedPostProcessorNames) {
//得到后置处理器Bean
BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);
//添加到集合中
orderedPostProcessors.add(pp);
if (pp instanceof MergedBeanDefinitionPostProcessor) {
internalPostProcessors.add(pp);
}
}
//排序后置处理器
sortPostProcessors(orderedPostProcessors, beanFactory);
//注册后置初期
registerBeanPostProcessors(beanFactory, orderedPostProcessors);
// Now, register all regular BeanPostProcessors.
//现在,注册所有常规 BeanPostProcessor。
List nonOrderedPostProcessors = new ArrayList<>();
//
for (String ppName : nonOrderedPostProcessorNames) {
//得到Bean的实例
BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);
nonOrderedPostProcessors.add(pp);
if (pp instanceof MergedBeanDefinitionPostProcessor) {
internalPostProcessors.add(pp);
}
}
//注册常规后置处理器
registerBeanPostProcessors(beanFactory, nonOrderedPostProcessors);
// Finally, re-register all internal BeanPostProcessors.
sortPostProcessors(internalPostProcessors, beanFactory);
//最后,重新注册所有内部 BeanPostProcessor。
registerBeanPostProcessors(beanFactory, internalPostProcessors);
// Re-register post-processor for detecting inner beans as ApplicationListeners,
// moving it to the end of the processor chain (for picking up proxies etc).
//ApplicationListener检测器,也是一个BeanPostProcessor
beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(applicationContext));
}
这里根据类型:BeanPostProcessor.class
找到了所有的后置处理器,然后通过beanFactory.getBean
创建Bean的实例,根据优先级依次注册到AbstractBeanFactory
中的List<BeanPostProcessor> beanPostProcessors = new CopyOnWriteArrayList<>()
集合中 , 注册顺序如下:
-
注册实现了PriorityOrdered 接口的优先级最高的后置处理器
-
注册实现了 Ordered接口的有序的后置处理器
-
注册常规后置处理器
-
注册内部使用的后置处理器MergedBeanDefinitionPostProcessor
对于AutowiredAnnotationBeanPostProcessor而言,它是属于PriorityOrdered的范畴,优先被注册,我们来看一下他的构造器
public class AutowiredAnnotationBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter
implements MergedBeanDefinitionPostProcessor, PriorityOrdered, BeanFactoryAware {
…省略…
/**
-
Create a new AutowiredAnnotationBeanPostProcessor
-
for Spring’s standard {@link Autowired} annotation.
-
Also supports