Spring Boot 版本: 2.1.4.RELEASE
配置了内存数据库EmbeddedDatabaseConnection 加载.
Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
自动配置: 基于CLASSPATH上出现的类,application.properties或者环境上下文出现的配置.作为依据,对spring-boot做出自动配置.
代码在:spring-boot-autoconfiguration包中.
开启自动配置: @EnableAutoConfiguration
排除指定的类: exclude=Class<?>[]
自动配置实现原理
使用各种条件注解
- @Conditional
- @ConditionalOnClass
- @ConditionalOnBean
- @ConditionalMissingBean
- @ConditionalOnProperty
- ……
加载META-INF/spring.factories文件中的类
@EnableAutoConfiguration注解中,引入了AutoConfigurationImportSelector在getCandidateConfigurations()方法中,使用了SpringFactoriesLoader类加载META-INF/spring.factories配置文件,并指定需要加载的配置键为AutoConfigurationImportSelector类的:getSpringFactoriesLoaderFactoryClass()方法的返回值,也就是EnableAutoConfiguration.class;
也就是通过这个方法,SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());获取到需要自动配置的类的信息.
在Spring Boot中,META-INF/spring.factories的文件内容如下:
其中org.springframework.boot.autoconfigure.EnableAutoConfiguration下面的条目是Spring Boot提供的自动配置的类: