- public static void registerBeanPostProcessors(ConfigurableListableBeanFactory beanFactory, AbstractApplicationContext applicationContext) {
- /**
- * IOC:stepA6-1 获取到所有已经定义了的, 需要创建实例的所有实现 BeanPostProcessor 的类
- * org.springframework.context.annotation.internalAutowiredAnnotationProcessor
- * org.springframework.context.annotation.internalRequiredAnnotationProcessor
- * org.springframework.aop.config.internalAutoProxyCreator
- */
- String[] postProcessorNames = beanFactory.getBeanNamesForType(BeanPostProcessor.class, true, false);
- ....
- /**
- * 分离实现了 PriorityOrdered,Ordered 和 rest 接口的 BeanPostProcessors
- * 按顺序注册 BeanPostProcessors
- */
- List<String> orderedPostProcessorNames = new ArrayList<>();
- List<String> nonOrderedPostProcessorNames = new ArrayList<>();
- for (String ppName : postProcessorNames) {
- if (beanFactory.isTypeMatch(ppName, PriorityOrdered.class)) { // 如果是 PriorityOrdered 的子类
- ....
- }
- else if (beanFactory.isTypeMatch(ppName, Ordered.class)) { //AOP 匹配 internalAutoProxyCreator, 添加到 orderedPostProcessorNames 集合当中
- orderedPostProcessorNames.add(ppName);
- }
- else {
- nonOrderedPostProcessorNames.add(ppName);
- }
- }
- // 首先, 注册实现 PriorityOrdered 接口的 BeanPostProcessors
- sortPostProcessors(priorityOrderedPostProcessors, beanFactory);
- registerBeanPostProcessors(beanFactory, priorityOrderedPostProcessors);
- // Next, register the BeanPostProcessors that implement Ordered.
- List<BeanPostProcessor> orderedPostProcessors = new ArrayList<>();
- for (String ppName : orderedPostProcessorNames) {
- BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class); // 实例化 internalAutoProxyCreator
- orderedPostProcessors.add(pp);
- if (pp instanceof MergedBeanDefinitionPostProcessor) {
- internalPostProcessors.add(pp);// 将 internalAutoProxyCreator 实例放进去
- }
- }
- sortPostProcessors(orderedPostProcessors, beanFactory);
- registerBeanPostProcessors(beanFactory, orderedPostProcessors); // 将 BeanPostProcessor 注册到 BeanFactory
- ....
- }
- /********************** 代码块三 ***********************/
来源: https://www.cnblogs.com/HuaiyinMarquis/p/9146779.html