我们运行启动类就可以运行项目,那么SpringBoot是怎么自动配置的呢?
我们从SpringBoot的入口类开始分析。入口类有@SpringBootApplication注解。点击进去:
@SpringBootConfiguration实际上也是一个@Configuration
1 | (ElementType.TYPE) |
SpringBoot自动配置的核心注解是@EnableAutoConfiguration,它主要是用来加载第三方库的类,点击进去:
1 | (ElementType.TYPE) |
@AutoConfigurationPackage:
1 | (ElementType.TYPE) |
可以看到上面的注解导入了一个类,这个类调用了getPackageName()方法。通过debug调试可以知道,这个packageName是SprinGBoot启动类同级目录的包名。换句话说,SpringBoot会自动扫描与启动类同级包以及子包的所有类。
1 |
|
接下来看@EnableAutoConfiguration还导入了另外一个类:@Import(AutoConfigurationImportSelector.class)
selectImports方法返回一个String数组,该数组包含了配置类的全限定名。通过获取配置类的全限定名,来将类导入IOC容器,从而实现自动配置。
1 |
|
那么,这些配置类的全限定名是从哪里来的呢?可以看到加载了一个配置文件:
1 | final class AutoConfigurationMetadataLoader { |
配置文件的内容:可以看到配置文件中是各种jar包的配置类