美文网首页
Spring Bean

Spring Bean

作者: 异或 | 来源:发表于2022-06-27 17:48 被阅读0次

加载入口

public void refresh() throws BeansException, IllegalStateException {
    // Invoke factory processors registered as beans in the context.
    invokeBeanFactoryPostProcessors(beanFactory);

    // Register bean processors that intercept bean creation.
    registerBeanPostProcessors(beanFactory);
...

PostProcessorRegistrationDelegate.registerBeanPostProcessors,注册BeanPostProcessor到BeanFactory的beanPostProcessors中

List<BeanPostProcessor> beanPostProcessors = new CopyOnWriteArrayList<>()
  1. 注册PriorityOrdered的BeanPostProcessor
        // First, register the BeanPostProcessors that implement PriorityOrdered.
        sortPostProcessors(priorityOrderedPostProcessors, beanFactory);
        registerBeanPostProcessors(beanFactory, priorityOrderedPostProcessors);
  1. 注册实现Ordered的BeanPostProcessor
        // Next, register the BeanPostProcessors that implement Ordered.
        List<BeanPostProcessor> orderedPostProcessors = new ArrayList<>(orderedPostProcessorNames.size());
        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);
  1. 注册其他BeanPostProcessor
        // Now, register all regular BeanPostProcessors.
        List<BeanPostProcessor> nonOrderedPostProcessors = new ArrayList<>(nonOrderedPostProcessorNames.size());
        for (String ppName : nonOrderedPostProcessorNames) {
            BeanPostProcessor pp = beanFactory.getBean(ppName, BeanPostProcessor.class);
            nonOrderedPostProcessors.add(pp);
            if (pp instanceof MergedBeanDefinitionPostProcessor) {
                internalPostProcessors.add(pp);
            }
        }
        registerBeanPostProcessors(beanFactory, nonOrderedPostProcessors);
  1. 注册内部BeanPostProcessor
        // Finally, re-register all internal BeanPostProcessors.
        sortPostProcessors(internalPostProcessors, beanFactory);
        registerBeanPostProcessors(beanFactory, internalPostProcessors);

PriorityOrdered的BeanPostProcessor

f33bbf7894dd565c05724485791c0779.png

实现Ordered的BeanPostProcessor

f1d44a8ed15ce44458ff1f4e97d20bbe.png

其他BeanPostProcessor

8f2304d6db1f76e4f3675aaf046ac7f6.png

内部BeanPostProcessor

相关文章

网友评论

      本文标题:Spring Bean

      本文链接:https://www.haomeiwen.com/subject/mnhovrtx.html