找回密码
 立即注册
首页 业界区 安全 9.Java Spring框架源码分析-IOC-注册BeanPostProcessor ...

9.Java Spring框架源码分析-IOC-注册BeanPostProcessor

咚獭 2025-7-4 17:20:00
目录

  • 1. 要研究的代码
  • 2. 获取所有类型为BeanPostProcessor的PostProcessor
  • 3. 遍历分成PriorityOrdered、MergedBeanDefinitionPostProcessor、Ordered、普通的四类
  • 4. 排序、把实现了PriorityOrdered的BeanPostProcessor加入到bean工厂里
  • 5. 排序、把实现了Ordered的BeanPostProcessor加入到bean工厂里
  • 6. 排序、把普通的BeanPostProcessor加入到bean工厂里
  • 7. 排序、把MergedBeanDefinitionPostProcessor类型的BeanPostProcessor加入到bean工厂里

1. 要研究的代码


  • AbstractApplicationContext registerBeanPostProcessors
  1. protected void registerBeanPostProcessors(ConfigurableListableBeanFactory beanFactory) {
  2.         //传入当前bean工厂,注册BeanPostProcessor并调用postProcess方法
  3.         PostProcessorRegistrationDelegate.registerBeanPostProcessors(beanFactory, this);
  4. }
复制代码
PostProcessorRegistrationDelegate.registerBeanPostProcessors(beanFactory, this);这个作用时传入当前bean工厂,注册BeanPostProcessor并调用postProcess方法

  • registerBeanPostProcessors(PostProcessorRegistrationDelegate)
  1. public static void registerBeanPostProcessors(
  2.                 ConfigurableListableBeanFactory beanFactory, AbstractApplicationContext applicationContext) {
  3.         //从bean工厂中获取类型为BeanPostProcessor的PostProcssor
  4.         String[] postProcessorNames = beanFactory.getBeanNamesForType(BeanPostProcessor.class, true, false);
  5.         // Register BeanPostProcessorChecker that logs an info message when
  6.         // a bean is  
  7.         // a bean is not eligible for getting processed by all BeanPostProcessors.
  8.         int beanProcessorTargetCount = beanFactory.getBeanPostProcessorCount() + 1 + postProcessorNames.length;
  9.         beanFactory.addBeanPostProcessor(new BeanPostProcessorChecker(beanFactory, beanProcessorTargetCount));
  10.         // Separate between BeanPostProcessors that implement PriorityOrdered,
  11.         // Ordered, and the rest.
  12.         List<BeanPostProcessor> priorityOrderedPostProcessors = new ArrayList<BeanPostProcessor>();
  13.         List<BeanPostProcessor> internalPostProcessors = new ArrayList<BeanPostProcessor>();
  14.         List<String> orderedPostProcessorNames = new ArrayList<String>();
  15.         List<String> nonOrderedPostProcessorNames = new ArrayList<String>();
  16.         //遍历所有PostProcessor,分为PriorityOrdered、MergedBeanDefinitionPostProcessor、Ordered、普通的四类
  17.         for (String ppName : postProcessorNames) {
  18.                 if (beanFactory.isTypeMatch(ppName, PriorityOrdered.class)) {
  19.                         BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);
  20.                         priorityOrderedPostProcessors.add(pp);
  21.                         if (pp instanceof MergedBeanDefinitionPostProcessor) {
  22.                                 internalPostProcessors.add(pp);
  23.                         }
  24.                 }
  25.                 else if (beanFactory.isTypeMatch(ppName, Ordered.class)) {
  26.                         orderedPostProcessorNames.add(ppName);
  27.                 }
  28.                 else {
  29.                         nonOrderedPostProcessorNames.add(ppName);
  30.                 }
  31.         }
  32.         // First, register the BeanPostProcessors that implement PriorityOrdered.
  33.         //排序、把实现了PriorityOrdered的BeanPostProcessor加入到bean工厂里
  34.         sortPostProcessors(priorityOrderedPostProcessors, beanFactory);
  35.         registerBeanPostProcessors(beanFactory, priorityOrderedPostProcessors);
  36.         // Next, register the BeanPostProcessors that implement Ordered.
  37.         //排序、把实现了Ordered的BeanPostProcessor加入到bean工厂里
  38.         List<BeanPostProcessor> orderedPostProcessors = new ArrayList<BeanPostProcessor>();
  39.         for (String ppName : orderedPostProcessorNames) {
  40.                 BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);
  41.                 orderedPostProcessors.add(pp);
  42.                 if (pp instanceof MergedBeanDefinitionPostProcessor) {
  43.                         internalPostProcessors.add(pp);
  44.                 }
  45.         }
  46.         sortPostProcessors(orderedPostProcessors, beanFactory);
  47.         registerBeanPostProcessors(beanFactory, orderedPostProcessors);
  48.         // Now, register all regular BeanPostProcessors.
  49.         //排序、把普通的BeanPostProcessor加入到bean工厂里
  50.         List<BeanPostProcessor> nonOrderedPostProcessors = new ArrayList<BeanPostProcessor>();
  51.         for (String ppName : nonOrderedPostProcessorNames) {
  52.                 BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);
  53.                 nonOrderedPostProcessors.add(pp);
  54.                 if (pp instanceof MergedBeanDefinitionPostProcessor) {
  55.                         internalPostProcessors.add(pp);
  56.                 }
  57.         }
  58.         registerBeanPostProcessors(beanFactory, nonOrderedPostProcessors);
  59.         // Finally, re-register all internal BeanPostProcessors.
  60.         ////排序、把MergedBeanDefinitionPostProcessor类型的BeanPostProcessor加入到bean工厂里
  61.         sortPostProcessors(internalPostProcessors, beanFactory);
  62.         registerBeanPostProcessors(beanFactory, internalPostProcessors);
  63.         // Re-register post-processor for detecting inner beans as ApplicationListeners,
  64.         // moving it to the end of the processor chain (for picking up proxies etc).
  65.         //最后加入一个ApplicationListenerDetector
  66.         beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(applicationContext));
  67. }
复制代码
2. 获取所有类型为BeanPostProcessor的PostProcessor
  1. //从bean工厂中获取类型为BeanPostProcessor的PostProcssor
  2. String[] postProcessorNames = beanFactory.getBeanNamesForType(BeanPostProcessor.class, true, false);
复制代码
3. 遍历分成PriorityOrdered、MergedBeanDefinitionPostProcessor、Ordered、普通的四类
  1. List<BeanPostProcessor> priorityOrderedPostProcessors = new ArrayList<BeanPostProcessor>();
  2. List<BeanPostProcessor> internalPostProcessors = new ArrayList<BeanPostProcessor>();
  3. List<String> orderedPostProcessorNames = new ArrayList<String>();
  4. List<String> nonOrderedPostProcessorNames = new ArrayList<String>();
  5. //遍历所有PostProcessor,分为PriorityOrdered、MergedBeanDefinitionPostProcessor、Ordered、普通的四类
  6. for (String ppName : postProcessorNames) {
  7.     if (beanFactory.isTypeMatch(ppName, PriorityOrdered.class)) {
  8.         BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);
  9.         priorityOrderedPostProcessors.add(pp);
  10.         if (pp instanceof MergedBeanDefinitionPostProcessor) {
  11.             internalPostProcessors.add(pp);
  12.         }
  13.     }
  14.     else if (beanFactory.isTypeMatch(ppName, Ordered.class)) {
  15.         orderedPostProcessorNames.add(ppName);
  16.     }
  17.     else {
  18.         nonOrderedPostProcessorNames.add(ppName);
  19.     }
  20. }
复制代码
4. 排序、把实现了PriorityOrdered的BeanPostProcessor加入到bean工厂里
  1. // First, register the BeanPostProcessors that implement PriorityOrdered.
  2. //排序、把实现了PriorityOrdered的BeanPostProcessor加入到bean工厂里
  3. sortPostProcessors(priorityOrderedPostProcessors, beanFactory);
  4. registerBeanPostProcessors(beanFactory, priorityOrderedPostProcessors);
复制代码
5. 排序、把实现了Ordered的BeanPostProcessor加入到bean工厂里
  1. // Next, register the BeanPostProcessors that implement Ordered.
  2. //排序、把实现了Ordered的BeanPostProcessor加入到bean工厂里
  3. List<BeanPostProcessor> orderedPostProcessors = new ArrayList<BeanPostProcessor>();
  4. for (String ppName : orderedPostProcessorNames) {
  5.     BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);
  6.     orderedPostProcessors.add(pp);
  7.     if (pp instanceof MergedBeanDefinitionPostProcessor) {
  8.         internalPostProcessors.add(pp);
  9.     }
  10. }
  11. sortPostProcessors(orderedPostProcessors, beanFactory);
  12. registerBeanPostProcessors(beanFactory, orderedPostProcessors);
复制代码
6. 排序、把普通的BeanPostProcessor加入到bean工厂里
  1. // Now, register all regular BeanPostProcessors.
  2. //排序、把普通的BeanPostProcessor加入到bean工厂里
  3. List<BeanPostProcessor> nonOrderedPostProcessors = new ArrayList<BeanPostProcessor>();
  4. for (String ppName : nonOrderedPostProcessorNames) {
  5.     BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);
  6.     nonOrderedPostProcessors.add(pp);
  7.     if (pp instanceof MergedBeanDefinitionPostProcessor) {
  8.         internalPostProcessors.add(pp);
  9.     }
  10. }
  11. registerBeanPostProcessors(beanFactory, nonOrderedPostProcessors);
复制代码
7. 排序、把MergedBeanDefinitionPostProcessor类型的BeanPostProcessor加入到bean工厂里
  1. // Finally, re-register all internal BeanPostProcessors.
  2. ////排序、把MergedBeanDefinitionPostProcessor类型的BeanPostProcessor加入到bean工厂里
  3. sortPostProcessors(internalPostProcessors, beanFactory);
  4. registerBeanPostProcessors(beanFactory, internalPostProcessors);
复制代码
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除

相关推荐

您需要登录后才可以回帖 登录 | 立即注册