publicstaticvoidregisterBeanPostProcessors(ConfigurableListableBeanFactory beanFactory,AbstractApplicationContext applicationContext){//获取实现了BeanPostProcessor接口的实现类的beanNameString[] postProcessorNames = beanFactory.getBeanNamesForType(BeanPostProcessor.class,true,false);// Register BeanPostProcessorChecker that logs an info message when// a bean is created during BeanPostProcessor instantiation, i.e. when// a bean is not eligible for getting processed by all BeanPostProcessors.//获取beanPostProcessor接口实现类的数量 这里加1 是因为下面又加入了一个bean(BeanPostProcessorChecker)int beanProcessorTargetCount = beanFactory.getBeanPostProcessorCount()+1+ postProcessorNames.length;
beanFactory.addBeanPostProcessor(newBeanPostProcessorChecker(beanFactory, beanProcessorTargetCount));// Separate between BeanPostProcessors that implement PriorityOrdered,// Ordered, and the rest.//存放 实现了PriorityOrdered接口的bean集合List<BeanPostProcessor> priorityOrderedPostProcessors =newArrayList<>();//存放实现了MergedBeanDefinitionPostProcessor接口的beanList<BeanPostProcessor> internalPostProcessors =newArrayList<>();//存放实现了Ordered接口beanNameList<String> orderedPostProcessorNames =newArrayList<>();//存放即没有实现PriorityOrdered接口,又没有实现Ordered接口的beanNameList<String> nonOrderedPostProcessorNames =newArrayList<>();for(String ppName : postProcessorNames){if(beanFactory.isTypeMatch(ppName,PriorityOrdered.class)){BeanPostProcessor pp = beanFactory.getBean(ppName,BeanPostProcessor.class);
priorityOrderedPostProcessors.add(pp);if(pp instanceofMergedBeanDefinitionPostProcessor){
internalPostProcessors.add(pp);}}elseif(beanFactory.isTypeMatch(ppName,Ordered.class)){
orderedPostProcessorNames.add(ppName);}else{
nonOrderedPostProcessorNames.add(ppName);}}// First, register the BeanPostProcessors that implement PriorityOrdered.//首先对于实现了PriorityOrdered接口的bean进行排序sortPostProcessors(priorityOrderedPostProcessors, beanFactory);//注册registerBeanPostProcessors(beanFactory, priorityOrderedPostProcessors);// Next, register the BeanPostProcessors that implement Ordered.//其次 获取实现了Ordered接口的beanList<BeanPostProcessor> orderedPostProcessors =newArrayList<>();for(String ppName : orderedPostProcessorNames){BeanPostProcessor pp = beanFactory.getBean(ppName,BeanPostProcessor.class);
orderedPostProcessors.add(pp);if(pp instanceofMergedBeanDefinitionPostProcessor){
internalPostProcessors.add(pp);}}//排序sortPostProcessors(orderedPostProcessors, beanFactory);//注册到beanFactory中registerBeanPostProcessors(beanFactory, orderedPostProcessors);// Now, register all regular BeanPostProcessors.//获取即没有实现PriorityOrdered接口,又没有实现Ordered接口的beanList<BeanPostProcessor> nonOrderedPostProcessors =newArrayList<>();for(String ppName : nonOrderedPostProcessorNames){BeanPostProcessor pp = beanFactory.getBean(ppName,BeanPostProcessor.class);
nonOrderedPostProcessors.add(pp);if(pp instanceofMergedBeanDefinitionPostProcessor){
internalPostProcessors.add(pp);}}//直接注册registerBeanPostProcessors(beanFactory, nonOrderedPostProcessors);// Finally, re-register all internal BeanPostProcessors.//所用Bean进行排序sortPostProcessors(internalPostProcessors, beanFactory);//注册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).//注册ApplicationListenerDetector
beanFactory.addBeanPostProcessor(newApplicationListenerDetector(applicationContext));}