浅谈SpringBoot自动配置原理(源码跟踪)

如何点击源码:

首先进去启动类,找到@SpringBootApplication注解  选中按ctrl 点击进入

前四个注解是元注解 与自动配置原理无关

@ComponentScan注解是用来进行组件扫描的,扫描启动类所在的包及其子包下所有被@Component及其衍生注解声明的类。

@SpringBootConfiguration注解上使用了@Configuration,表明SpringBoot启动类就是一个配置类

所以只有@EnableAutoConfiguration注解是关于自动配置的,点击进入

(使用@Import注解,导入了实现ImportSelector接口的实现类。

AutoConfigurationImportSelector类是ImportSelector接口的实现类。)

具体分为一下几个步骤:

1.点进来我们发现有@Import注解点击进入AutoConfigurationImportSelector

 2.点击@Import后面的

3.会发现这个类实现了一串串

 4.点击进入第一个 DeferredImportSelector发现这个类继承了  ImportSelector

5. 回到上一级(ctrl+alt+左键两次) 就会有一个selectImports类

 然后,我们观察返回值,发现if中的为空,所以看else中 返回的是autoConfigurationEntry,,这个是返回值来自于上一行,点击进入

 进入之后观察返回值,是configurations和自动配置有关,所以点击getCandidateConfigurations

 进入后,因为List<String> configurations = new ArrayList(SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()));比较复杂 但是断言是可以看懂的可以,根据message看出有关自动配置类在META-INF/spring.factories和META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports中

 最后,在左侧项目中

里面找到Maven下的spring-boot-autoconfigure

注意:在2.7以上使用.imports 2.7及以下使用.factories

 我们以gson为例.gson的bean对象,进行JSON格式转换。虽然我们没有配置bean对象,但是我们是可以直接注入使用的。原因就是因为在自动配置类当中做了自动配置.

选中,双击ctrl或者shift进入

 发现使用@Bean注解将对象放入Spring容器.

总结:SpringBoot的自动配置原理:

SpringBoot主启动类的注解@SpringBootApplication中的一个自动配置注解@EnableAutoConfiguration,这个注解底层使用了@Import注解导入ImportSelector的实现类,实现类中的方法selectImport中扫描了Spring.factories和AutoConfiguration.imports,这两个配置文件中有许多自动配置类,自动配置类中就是用@Bean直接把对象放到Spring容器中.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tmlh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值