Spring Boot的自动配置实现由启动类上@SpringBootApplication注解中@EnableAutoConfiguration注解中的@Import(EnableAutoConfigurationImportSelector.class)注解导入的EnableAutoConfigurationImportSelector实现的。
1.5版本以前使用EnableAutoConfigurationImportSelector类,1.5以后这个类标识过时了,但在1.5之后代码中还是用该类,且该类中没有了核心实现,而在其父类AutoConfigurationImportSelector中。
1 | // 我采用的版本:1.5.14.RELEASE |
AutoConfigurationImportSelector会使用SpringFactoriesLoader.loadFactoryNames方法来扫描具有MEAT-INF/spring.factories文件的jar包。
1 | // AutoConfigurationImportSelector类中的方法 |
SpringFactoriesLoader类的静态方法loadFactoryNames()实现
1 | public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories"; |
spring-boot-autoconfigure-1.5.14.RELEASE.jar中META-INF/spring.factories文件部分内容如下:
1 | # Initializers |
其实就是一个属性文件,左侧通常为一个接口或者是一个注解类,右侧为接口的实现,或者是和左值相关的注解。
Auto Configure注释下都是自动配置类,SpringBoot会根据这些自动配置类去自动配置环境,如对redis和mongo的自动配置类。