你的位置:首页 > 软件开发 > Java > Ioc容器BeanPostProcessor-Spring 源码(3)

Ioc容器BeanPostProcessor-Spring 源码(3)

发布时间:2017-01-26 00:00:07
Ioc容器BeanPostProcessor-Spring 源码(3) 目录:Ioc容器beanDefinition-Spring 源码(1)Ioc容器依赖注入-Spring 源码(2)Ioc容器BeanPostProcessor-Spring 源码(3) 如果这个接 ...

Ioc容器BeanPostProcessor-Spring 源码(3)

Ioc容器BeanPostProcessor-Spring 源码(3)

 

目录:

Ioc容器beanDefinition-Spring 源码(1)

Ioc容器依赖注入-Spring 源码(2)

那么根据order顺序来执行BeanPostProcessors实现就是按顺序在放这个List<BeanPostProcessor>里,实现的代码如下:

public static void registerBeanPostProcessors(   ConfigurableListableBeanFactory beanFactory, AbstractApplicationContext applicationContext) {  String[] 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.  int beanProcessorTargetCount = beanFactory.getBeanPostProcessorCount() + 1 + postProcessorNames.length;  beanFactory.addBeanPostProcessor(new BeanPostProcessorChecker(beanFactory, beanProcessorTargetCount));  // Separate between BeanPostProcessors that implement PriorityOrdered,  // Ordered, and the rest.  // 实现Ordered接口的  List<BeanPostProcessor> priorityOrderedPostProcessors = new ArrayList<BeanPostProcessor>();  // 未实现Ordered接口的  List<BeanPostProcessor> internalPostProcessors = new ArrayList<BeanPostProcessor>();  List<String> orderedPostProcessorNames = new ArrayList<String>();  List<String> nonOrderedPostProcessorNames = new ArrayList<String>();  for (String ppName : postProcessorNames) {   if (beanFactory.isTypeMatch(ppName, PriorityOrdered.class)) {     BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);     priorityOrderedPostProcessors.add(pp);     if (pp instanceof MergedBeanDefinitionPostProcessor) {      //反而没有实现ordered的先放      internalPostProcessors.add(pp);     }   }   else if (beanFactory.isTypeMatch(ppName, Ordered.class)) {     orderedPostProcessorNames.add(ppName);   }   else {     nonOrderedPostProcessorNames.add(ppName);   }  }  // First, register the BeanPostProcessors that implement PriorityOrdered.  sortPostProcessors(beanFactory, priorityOrderedPostProcessors);  registerBeanPostProcessors(beanFactory, priorityOrderedPostProcessors);  // Next, register the BeanPostProcessors that implement Ordered.  List<BeanPostProcessor> orderedPostProcessors = new ArrayList<BeanPostProcessor>();  for (String ppName : orderedPostProcessorNames) {   BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);   orderedPostProcessors.add(pp);   if (pp instanceof MergedBeanDefinitionPostProcessor) {     internalPostProcessors.add(pp);   }  }  sortPostProcessors(beanFactory, orderedPostProcessors);  registerBeanPostProcessors(beanFactory, orderedPostProcessors);  // Now, register all regular BeanPostProcessors.  List<BeanPostProcessor> nonOrderedPostProcessors = new ArrayList<BeanPostProcessor>();  for (String ppName : nonOrderedPostProcessorNames) {   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(beanFactory, internalPostProcessors);  registerBeanPostProcessors(beanFactory, internalPostProcessors);   beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(applicationContext));}

原标题:Ioc容器BeanPostProcessor-Spring 源码(3)

关键词:Spring

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录