美文网首页
Spring源码解析之@Import @ImportSelect

Spring源码解析之@Import @ImportSelect

作者: 但时间也偷换概念 | 来源:发表于2019-10-02 23:14 被阅读0次

    直接从上一篇Spring源码解析之@Configuration @Bean源码继续

    启动类

    我们从spring-boot启动类进入源码,自动装配从这里开始

    进入run方法

    run方法走进来,经过了SpringApplication的构造函数以后,进入上图的run方法。

    这个run方法不是今天的重点,所以简单介绍一下。

    run方法主要是做环境准备,打印banner,注册Listener等工作。

    我们直接进入refreshContext方法。

    可以看到跟进来以后,走到了refresh模版方法,这也是spring源码里最关键的一个方法了,spring xml管理bean也是从refresh开始的,所以我们还可以知道,spring-boot最后也是走到refresh去完成升级的。

    然后我们直接进入invokeBeanFactoryPostProcessors(beanFactory)方法

    再进入PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(beanFactory, getBeanFactoryPostProcessors());

    再跟进

    invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry);

    进入ConfigurationClassPostProcessor实现

    然后我们进入processConfigBeanDefinitions(registry);

    然后我们进入parser.parse(candidates);

    然后我们看三个parse方法,和parse内调用的processConfigurationClass(new ConfigurationClass(reader, beanName));

    众所周知Spring源码的风格有一个特点,真正干事情的就是do Prefix Method。

    所以我们进入sourceClass = doProcessConfigurationClass(configClass, sourceClass);

    好,我们直接进入

    processImports(configClass, sourceClass, getImports(sourceClass), true);

    分别是三种处理

    1.如果实现了ImportSelector接口

    2.如果实现了ImportBeanDefinitionRegistrar接口

    3.如果就是@Import当@COnfiguration用

    其余的就不赘述了,和上篇一致~

    相关文章

      网友评论

          本文标题:Spring源码解析之@Import @ImportSelect

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