美文网首页
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