SpringBoot自动装配原理[源码]

3 篇文章 0 订阅

SpringBoot版本:2.3.2.RELEASE

1、首先我通过springboot主程序上唯一的注解@SpringBootApplication进入查看springboot源码
在这里插入图片描述

SpringBootApplication是SpringBoot的主要配置类,SpringBoot的main方法就是由这个类启动的而这个类上还配置了SpringBoot的几个核心注解:

@SpringBootConfiguration:标明这是一个SpringBoot的配置类
@EnableAutoConfiguration:让SpringBoot开启自动配置功能(非常重要!!!) @ComponentScan:开启SpringBoot扫描(这个扫描机制只会扫描到与主程序同级目录即之下的目录)

现在我们进入@EnableAutoConfiguration

在这里插入图片描述

这里也有两个需要注意的注解:

1. @AutoConfigurationPackage:自动配置包

在这里插入图片描述

@Import({AutoConfigurationPackages.Registrar.class}):底层注解,给容器导入组件; 将主配置类(@SpringBootApplication标注的类)的所在包及下面所有的子包里面的所有组件扫描到Spring容器

2.@Import( AutoConfigurationImportSelector.class)

AutoConfigurationImportSelector:SpringBoot自动导入配置选择器,SpringBoot自动加载配置就是在这个类的基础完成的

现在我们进入AutoConfigurationImportSelector类

在这里插入图片描述

这个类中的selectImports方法是需要我们关注的,在这个方法中SpringBoot获取了所有的配置信息并返回给了调用者,而有一个核心方法getCandidateConfigurations获取到了所有配置信息的List集合第123行
List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);

我们通过DeBug调试可以查看到这个配置信息的List集合
在这里插入图片描述

仔细查看这些配置信息我们可以发现,所有的配置信息对应了类都是以AutoConfiguration结尾的,

那么这些配置信息SpringBoot又是从哪里获取的呢?

自动装配信息

在SpringBoot依赖jar包中有一个自动加载配置jar包的文件
META-INF目录下的spring.factories文件

在调试过程中我们随便copy了一个配置信息,在spring-factories文件中搜索,你会发现,只要是configurations属性下的配置信息,都可以看见,

当然,其中对应自动配置的类也在各自jar包下META-INF目录下的spring.factories文件中,而不是全都在spring-boot-autoconfigure-2.3.2.RELEASE.jar 包中

如上图configurations属性中的第一个值:
org.springframework.boot.devtools.autoconfigure.DevToolsDataSourceAutoConfiguration
咱们按这个类所属的包名去找到对应的jar包,即可能是spring-boot-devtools包中的类,打开该jar包下的factories文件查看果然存在其中
在这里插入图片描述

那么为什么SpringBoot会读取META-INF下的factories文件呢

前面有说到有一个核心方法getCandidateConfigurations获取到了所有配置信息的List集合
List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes);

那么这个方法内到底做了什么呢?

在这里插入图片描述

可以看到这里的一行关键代码

List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),
调用SpringFactoriesLoader类中的loadFactoryNames,我们进入到SpringFactoriesLoader类中
在这里插入图片描述
即SpringBoot在自动装配时会用到SpringFactoriesLoader类去读取factories文件中的配置内容

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值