美文网首页spring 相关
spring容器(五):注册BeanPostProcessor到

spring容器(五):注册BeanPostProcessor到

作者: aix91 | 来源:发表于2019-06-29 21:38 被阅读0次

上一章中讲解了:BeanPostProcessorFactory方法的调用,给BeanFactory中引入类BeanPostProcessor类。这一章,我们来看看spring容器在创建时,如何添加BeanPostProcessor。

1. registerBeanPostProcessors:注册BeanPostProcessor到容器

public static void registerBeanPostProcessors( ConfigurableListableBeanFactory beanFactory, AbstractApplicationContext applicationContext) {
    //获取BeanFactory中的BeanPostProcessor类
    String[] postProcessorNames = beanFactory.getBeanNamesForType(BeanPostProcessor.class, true, false);
    
    //添加了BeanPostProcessorChecker
    beanFactory.addBeanPostProcessor(new BeanPostProcessorChecker(beanFactory, beanProcessorTargetCount));

    //将BeanPostProcessor按照PriorityOrdered->Orderd->Normal顺序来整理BeanPostProcessor
    List<BeanPostProcessor> priorityOrderedPostProcessors = new ArrayList<BeanPostProcessor>();
    List<BeanPostProcessor> internalPostProcessors = new ArrayList<BeanPostProcessor>();
    List<String> orderedPostProcessorNames = new ArrayList<String>();
    List<String> nonOrderedPostProcessorNames = new ArrayList<String>();
    
     ...
    // 首先排序PriorityOrdered的BeanPostProcessor,然后注册到BeanFactory中
    sortPostProcessors(beanFactory, priorityOrderedPostProcessors);
    registerBeanPostProcessors(beanFactory, priorityOrderedPostProcessors);

    // 接下来是Ordered->normal->internal

    //最后添加了ApplicationListenerDetector的BeanPostProcessor
    beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(applicationContext));

}

2. addBeanPostProcessor

将BeanPostProcessor存放在List中,以备后续创建Bean时使用。

@Override
    public void addBeanPostProcessor(BeanPostProcessor beanPostProcessor) {
        Assert.notNull(beanPostProcessor, "BeanPostProcessor must not be null");
        this.beanPostProcessors.remove(beanPostProcessor);
        this.beanPostProcessors.add(beanPostProcessor);
        if (beanPostProcessor instanceof InstantiationAwareBeanPostProcessor) {
            this.hasInstantiationAwareBeanPostProcessors = true;
        }
        if (beanPostProcessor instanceof DestructionAwareBeanPostProcessor) {
            this.hasDestructionAwareBeanPostProcessors = true;
        }
    }

相关文章

网友评论

    本文标题:spring容器(五):注册BeanPostProcessor到

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