扫描自动配置组件
1、SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration
2、@EnableAutoConfiguration作用: 给容器中导入一些组件
- @AutoConfigurationPackage:将主配置类的包以及子包下的所有组件扫描进spring容器中
- 利用AutoConfigurationImportSelector类下的selectImports()下的 List configurations = getCandidateConfigurations(annotationMetadata, attributes); 获取候选的配置
扫描所有jar包类路径下的META-INF/spring.factories,把扫描到的这些文件的内容包装成功properties对象,从properties中获取到EnableAutoConfiguration.class(类名)对应的值,然后把他们添加到容器中private static Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader) { MultiValueMap<String, String> result = (MultiValueMap)cache.get(classLoader); if (result != null) { return result; } else { try { Enumeration<URL> urls = classLoader != null ? classLoader.getResources("META-INF/spring.factories") : ClassLoader.getSystemResources("META-INF/spring.factories");
每一个xxxAutoConfiguration类都是容器的一个组件,都加入到容器中,用他们来做自动配置
以Http编码自动配置为例
必须要满足某些条件配置类才生效
@Conditional
debug
查看哪些配置属性生效