【Spring记录】SpringBoot自动配置原理

废话不说,直奔主题。

首先,从启动类的@SpringBootApplication点进去,发现一个注解@EnableAutoConfiguration(这是一个接口),

点进去后发现,主要由@AutoConfigurationPackage,@Import(AutoConfigurationImportSelector.class)组成

其中@AutoConfigurationPackage主要是扫描主配置类及子类包,存储自动配置包供后边使用,比如JPA包,等等。

我们看一下另一个注解@Import(EnableAutoConfigurationImportSelector.class),这个类继承自AutoConfigurationImportSelector

主要方法在父类(AutoConfigurationImportSelector)里面。

第二步,点进去父类看到一个关键的方法 selectImports

返回的是一个String数组,加载文件主要有两个方法,一个是AutoConfigurationMetadataLoader.loadMetadata();

另一个是getCandidateConfigurations();下面会展开介绍这个两个方法。

loadMetadata()方法

从META-INF/spring-autoconfigure-metadata.properties文件中加载属性配置

 

getCandidateConfigurations()

从"META-INF/spring.factories"加载自动配置类名

这两个配置文件到底有什么区别呢

spring-autoconfigure-metadata.properties 和 spring.factories

举个例子 在spring.factories中

org.springframework.boot.autoconfigure.EnableAutoConfiguration=

org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\

有SpringApplicationAdminJmxAutoConfiguration这个配置类。

点进去这个配置类,会有一些条件注解和后置操作。

在spring-autoconfigure-metadata.properties中找到这个配置类:

org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration.AutoConfigureAfter=org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration

也就是说spring.factories是告诉你有哪些配置类需要加载。

spring-autoconfigure-metadata.properties是对应配置类需要自动装配的条件。

总结一下

  • 1.启动类有@SpringBootApplication注解,这个注解包含了@EnableAutoConfiguration注解
  • 2.@EnableAutoConfiguration注解,由@AutoConfigurationPackage和@Import(AutoConfigurationImportSelector.class)组成
  • 3.前者主要是扫描主配置类及子类包,存储自动配置包;后者调用selectImports方法,将配置类信息交给SpringFactory加载器进行一系列的创建过程,先生成枚举类对象,再遍历放到List集合中。
  • 4.其中selectImports方法主要扫描了META-INF下的spring-autoconfigure-metadata.properties 和 spring.factories两个配置文件。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

安逸的程序猿

意思不意思那是你的意思我没意思

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

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

打赏作者

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

抵扣说明:

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

余额充值