目录
- 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
- protected void registerBeanPostProcessors(ConfigurableListableBeanFactory beanFactory) {
- //传入当前bean工厂,注册BeanPostProcessor并调用postProcess方法
- PostProcessorRegistrationDelegate.registerBeanPostProcessors(beanFactory, this);
- }
复制代码 PostProcessorRegistrationDelegate.registerBeanPostProcessors(beanFactory, this);这个作用时传入当前bean工厂,注册BeanPostProcessor并调用postProcess方法
- registerBeanPostProcessors(PostProcessorRegistrationDelegate)
- public static void registerBeanPostProcessors(
- ConfigurableListableBeanFactory beanFactory, AbstractApplicationContext applicationContext) {
- //从bean工厂中获取类型为BeanPostProcessor的PostProcssor
- String[] postProcessorNames = beanFactory.getBeanNamesForType(BeanPostProcessor.class, true, false);
- // Register BeanPostProcessorChecker that logs an info message when
- // a bean is
- // 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.
- List<BeanPostProcessor> priorityOrderedPostProcessors = new ArrayList<BeanPostProcessor>();
- List<BeanPostProcessor> internalPostProcessors = new ArrayList<BeanPostProcessor>();
- List<String> orderedPostProcessorNames = new ArrayList<String>();
- List<String> nonOrderedPostProcessorNames = new ArrayList<String>();
- //遍历所有PostProcessor,分为PriorityOrdered、MergedBeanDefinitionPostProcessor、Ordered、普通的四类
- for (String ppName : postProcessorNames) {
- if (beanFactory.isTypeMatch(ppName, PriorityOrdered.class)) {
- BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);
- priorityOrderedPostProcessors.add(pp);
- if (pp instanceof MergedBeanDefinitionPostProcessor) {
- internalPostProcessors.add(pp);
- }
- }
- else if (beanFactory.isTypeMatch(ppName, Ordered.class)) {
- orderedPostProcessorNames.add(ppName);
- }
- else {
- nonOrderedPostProcessorNames.add(ppName);
- }
- }
- // First, register the BeanPostProcessors that implement PriorityOrdered.
- //排序、把实现了PriorityOrdered的BeanPostProcessor加入到bean工厂里
- sortPostProcessors(priorityOrderedPostProcessors, beanFactory);
- registerBeanPostProcessors(beanFactory, priorityOrderedPostProcessors);
- // Next, register the BeanPostProcessors that implement Ordered.
- //排序、把实现了Ordered的BeanPostProcessor加入到bean工厂里
- 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(orderedPostProcessors, beanFactory);
- registerBeanPostProcessors(beanFactory, orderedPostProcessors);
- // Now, register all regular BeanPostProcessors.
- //排序、把普通的BeanPostProcessor加入到bean工厂里
- 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.
- ////排序、把MergedBeanDefinitionPostProcessor类型的BeanPostProcessor加入到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(new ApplicationListenerDetector(applicationContext));
- }
复制代码 2. 获取所有类型为BeanPostProcessor的PostProcessor
- //从bean工厂中获取类型为BeanPostProcessor的PostProcssor
- String[] postProcessorNames = beanFactory.getBeanNamesForType(BeanPostProcessor.class, true, false);
复制代码 3. 遍历分成PriorityOrdered、MergedBeanDefinitionPostProcessor、Ordered、普通的四类
- List<BeanPostProcessor> priorityOrderedPostProcessors = new ArrayList<BeanPostProcessor>();
- List<BeanPostProcessor> internalPostProcessors = new ArrayList<BeanPostProcessor>();
- List<String> orderedPostProcessorNames = new ArrayList<String>();
- List<String> nonOrderedPostProcessorNames = new ArrayList<String>();
- //遍历所有PostProcessor,分为PriorityOrdered、MergedBeanDefinitionPostProcessor、Ordered、普通的四类
- for (String ppName : postProcessorNames) {
- if (beanFactory.isTypeMatch(ppName, PriorityOrdered.class)) {
- BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);
- priorityOrderedPostProcessors.add(pp);
- if (pp instanceof MergedBeanDefinitionPostProcessor) {
- internalPostProcessors.add(pp);
- }
- }
- else if (beanFactory.isTypeMatch(ppName, Ordered.class)) {
- orderedPostProcessorNames.add(ppName);
- }
- else {
- nonOrderedPostProcessorNames.add(ppName);
- }
- }
复制代码 4. 排序、把实现了PriorityOrdered的BeanPostProcessor加入到bean工厂里
- // First, register the BeanPostProcessors that implement PriorityOrdered.
- //排序、把实现了PriorityOrdered的BeanPostProcessor加入到bean工厂里
- sortPostProcessors(priorityOrderedPostProcessors, beanFactory);
- registerBeanPostProcessors(beanFactory, priorityOrderedPostProcessors);
复制代码 5. 排序、把实现了Ordered的BeanPostProcessor加入到bean工厂里
- // Next, register the BeanPostProcessors that implement Ordered.
- //排序、把实现了Ordered的BeanPostProcessor加入到bean工厂里
- 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(orderedPostProcessors, beanFactory);
- registerBeanPostProcessors(beanFactory, orderedPostProcessors);
复制代码 6. 排序、把普通的BeanPostProcessor加入到bean工厂里
- // Now, register all regular BeanPostProcessors.
- //排序、把普通的BeanPostProcessor加入到bean工厂里
- 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);
复制代码 7. 排序、把MergedBeanDefinitionPostProcessor类型的BeanPostProcessor加入到bean工厂里
- // Finally, re-register all internal BeanPostProcessors.
- ////排序、把MergedBeanDefinitionPostProcessor类型的BeanPostProcessor加入到bean工厂里
- sortPostProcessors(internalPostProcessors, beanFactory);
- registerBeanPostProcessors(beanFactory, internalPostProcessors);
复制代码 来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除 |