springboot 2.x 自动配置的实现及原理
在面对这个问题之前,先祭奠一下我的上次面试。。。太过悲惨,不忍直视。阿米头佛
1. 什么是自动配置
简单来说,就是将传统的ssm项目中,我们需要在xml中写入大量配置文件,用来配置我们所需的组件。而springboot帮助我们完成了简化,一种更便利的开发方式:自动配置。在自动配置中,我们只需要引入特定的stater即可,其他需要的组件springboot会自动帮我们加入到容器中,这就是自动配置。
2. springboot 是如何实现自动配置的
首先每一个springboot都有一个至关重要的注解
@SpringBootApplication
@SpringBootApplication
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class,args);
}
}
这是每个springboot项目启动类上必要的注解,那自动配置的奥秘也就隐藏在其中,跟踪进入这个注解查看源码
继续查看**@EnableAutoConfiguration**
其中核心部分就是引入了 AutoConfigurationImportSelector这个配置类,这个类中的核心方法就是 selectImports(),它表明哪些自动配置类是要加入容器中的。
继续追踪源码,可以看到getAutoConfigurationEntry()这个方法,其中configurations存放的数据就是加入容器的自动配置类的完整路径包
而从getCandidateConfigurations()方法中,我们可以看到自动配置的包路径是存放在META_INF/spring.factories文件中
在spring-boot-autoconfigure包下META_INF/spring.factories 如下
3. application.properties 中的配置是如何装配的
首先 @EnableAutoConfigration 这个注解是简介隐藏在 @SpringBootApplication 中的,通过这个注解SpringApplication.run() 的内部会执行 selectImports() 方法,寻找 META-INF/spring.factores 文件,读取里面的文件配置,将一级写好的配置类有选择的加载到spring容器中,并按照事先约定在 appliction.properties 中配置