SpringBoot 自动装配原理
@SpringBootApplication 注解点进去如下:

@SpringBootApplication 有3个重要的注解分别是
@SpringBootConfiguration 就是一个配置类
@EnableAutoConfiguration
@ComponentScan
@Import(AutoConfigurationImportSelector.class)
@SpringBootConfiguration

要想当前程序可以申明成自动注入装配的。我们一般可以在类上添加 @Component ,但是这个 @SpringBootConfiguration 里并没有看到。点击 Configuration 进入
@Configuration

点击 @Configuration 进入,可以看到 Configuration 上已经有了 @Component 的注解了。注解有继承关系。SpringBootConfiguration也会有该功能
@EnableAutoConfiguration

EnableAutoConfiguration 中有两个重要的注解分别是 @AutoConfigurationPackage、@Import(AutoConfigurationImportSelector.class)
@AutoConfigurationPackage

AutoConfigurationPackage 再点进去看,有一个@Import(AutoConfigurationPackages.Registrar.class),返回一个 Registrar 方法如下

@Import(AutoConfigurationImportSelector.class)
进入 AutoConfigurationImportSelector.class 类中,有一个方法 getCandidateConfigurations 。这个方法就是获取 spring.factories 配置文件中的Key,Value 属性值。那么这个Key就是 this.getSpringFactoriesLoaderFactoryClass() 方法返回的值 EnableAutoConfiguration
getCandidateConfigurations()
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(
this.getSpringFactoriesLoaderFactoryClass(),
this.getBeanClassLoader());
Assert.notEmpty(configurations,
"No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");
return configurations;
}

this.getSpringFactoriesLoaderFactoryClass()
返回值为 EnableAutoConfiguration

到 SpringBoot-autoconfigure 中查看 spring.factories 文件,可以看到其中一对的 K , V属性值,找到 EnableAutoConfiguration 这个key 属性,可以看到很多属性
spring.factories 文件
断点调试 getCandidateConfigurations()
看到 List<String> configurations 中的值和 spring.factories 文件 中一致的

本文深入探讨了SpringBoot的自动装配原理,从@SpringBootApplication注解出发,解析了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan的作用。@Configuration注解的继承关系确保了配置类的功能,而@EnableAutoConfiguration通过@AutoConfigurationPackage和@Import(AutoConfigurationImportSelector.class)来加载spring.factories中的配置。在调试过程中,发现getCandidateConfigurations方法用于获取@EnableAutoConfiguration对应的配置类列表,这些配置类来源于spring.factories文件。通过对这个过程的理解,可以更好地掌握SpringBoot的自动配置机制。
1864

被折叠的 条评论
为什么被折叠?



