新版springboot自动装配原理@SpringBootApplication

先给出我们今天的主角:在这里插入图片描述
接下去分为三个部分,我一一来分析:
1.@SpringBootConfiguration springboot的配置注解
2.@EnableAutoConfiguration 自动配置注解
3.@ComponentScan 扫描包注解

在这里插入图片描述
1.1@SpringBootConfiguration springboot的配置注解
点开后发现就是个配置类:

在这里插入图片描述
2.@EnableAutoConfiguration 自动配置注解
打开后发现里面有两个注解:
1.自动导入包:@AutoConfigurationPackage
2.导入了一个自动导入选择器类:@Import(AutoConfigurationImportSelector.class)
在这里插入图片描述
2.1自动导入包进入后发现
就是一个自动注册类:所以到这我们就探究完成了
11
2.2我们进入自动导入选择器类里面(这是核心)
里面定义了各种环境变量,类加载器,资源加载器:
重点看这个方法getAutoConfigurationEntry:自动加载配置器实体,
然后这里使用了方法 getCandidateConfigurations获取候选的配置:
在这里插入图片描述
2.2.1我们这里再进入这个getCandidateConfigurations获取候选的配置的方法
这里获取了spring工厂的加载,加载工厂类:再点进去他加载的工厂类方法,这里我们分析两个地方:
1.getSpringFactoriesLoaderFactoryClass() 获取了加载类
2.SpringFactoriesLoader.loadFactoryNames 获取所有加载的配置方法
在这里插入图片描述
2.2.1.1 发现了神奇的事情,它获取了自动配置注解底下的类
也就是我们的主启动类:
在这里插入图片描述
主启动类:在这里插入图片描述
2.2.1.2

获取所有的加载配置底下还有给返回所有的sring加载配置标注的是list,我们跟进看看
在这里插入图片描述
2.2.1.2.1 然后这个方法就是从配置文件或者从系统文件中获取,
然后循环获取所有的配置所有的配置,然后遍历出封装成properties供我们使用
这里代码太长了,我把源码贴出来
在这里插入图片描述

  try {
                Enumeration<URL> urls = classLoader != null ? classLoader.getResources("META-INF/spring.factories") : ClassLoader.getSystemResources("META-INF/spring.factories");
                LinkedMultiValueMap result = new LinkedMultiValueMap();

                while(urls.hasMoreElements()) {
                    URL url = (URL)urls.nextElement();
                    UrlResource resource = new UrlResource(url);
                    Properties properties = PropertiesLoaderUtils.loadProperties(resource);
                    Iterator var6 = properties.entrySet().iterator();

可以清楚的看到我们的配置文件是装在META-INF/spring.factories里的,这时,我们选择到具体包下去查看:

我找了spring.factories下的一个类:

org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration
然后conditional就是这个类生效的条件,当他的star启动后,满足conditional后的条件就会生效
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值