@EnableAutoConfiguration
开启自动解析配置类
- 根据 classpath 下的依赖自动配置
- 条件注解自动配置
- 配置文件配置属性spring.autoconfigure.*
- 自定义类加@Configuration注解
ImportSelector和DeferredImportSelector
都可以实现配置类分组, DeferredImportSelector可以实现延迟加载配置类上bean
条件注解
- ConditionalOnBean:是否存在某个某类或某个名字的Bean
- ConditionalOnMissingBean:是否缺失某个某类或某个名字的Bean
- ConditionalOnSingleCandidate:是否符合指定类型的Bean只有一个
- ConditionalOnClass:是否存在某个类
- ConditionalOnMissingClass:是否缺失某个类
- ConditionalOnExpression:指定的表达式返回的是true还是false
- ConditionalOnJava:判断Java版本
- ConditionalOnJndi:JNDI指定的资源是否存在
- ConditionalOnWebApplication:当前应用是一个Web应用
- ConditionalOnNotWebApplication:当前应用不是一个Web应用
- ConditionalOnProperty:Environment中是否存在某个属性
- ConditionalOnResource:指定的资源是否存在
- ConditionalOnWarDeployment:当前项目是不是以War包部署的方式运行
- ConditionalOnCloudPlatform:是不是在某个云平台上
也可以利用@Conditional来自定义条件注解。
引入starter开启自动配置
例如引入spring-boot-starter-web依赖, 会自动解析Tomcat配置类, 利用条件注解实现
@Configuration@ConditionalOnClass({Servlet.class, Tomcat.class, UpgradeProtocol.class})@ConditionalOnMissingBean(value = {ServletWebServerFactory.class},search = SearchStrategy.CURRENT)public static class EmbeddedTomcat {public EmbeddedTomcat() {}@Beanpublic TomcatServletWebServerFactory tomcatServletWebServerFactory() {return new TomcatServletWebServerFactory();}}