作用:自动配置
可以帮助SpringBoot应用将所有符合条件的@Configuration配置都加载到当前SpringBoot创建并使用的IoC容器
实现原理:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
Class<?>[] exclude() default {};
String[] excludeName() default {};
}
核心的是@Import(AutoConfigurationImportSelector.class)
这个类的私有类AutoConfigurationGroup的方法process->getAutoConfigurationEntry->getCandidateConfigurations方法里
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(
getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
会读取MET-INF下面spring-factories里的key为org.springframework.boot.autoconfigure.EnableAutoConfiguration下的所有配置,如果有自定义的starter,则该starter下的MET-INF下面spring-factories的相应配置也会被读取并会加载相关配置到iOC容器里,会根据条件是否加载该配置
如
@ConditionalOnClass : classpath中存在该类时起效