XxxxApplication.java --> @SpringBootApplication --> @EnableAutoConfiguration -->
@Import(EnableAutoConfigurationImportSelector.class) --> AutoConfigurationImportSelector.java -->
//找到 有 META-INF/spring.factories 文件的jar包
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata,
AnnotationAttributes attributes) {
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(
getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
Assert.notEmpty(configurations,
"No auto configuration classes found in META-INF/spring.factories. If you "
+ "are using a custom packaging, make sure that file is correct.");
return configurations;
}
--> org.springframework.boot.autoconfigure.autoConfigure.jar --> META-INF/spring.factories
--> 这个文件里面所有配置的类, 可以自动配置
比如: WebMvcAutoConfiguration
@Bean @ConditionalOnMissingBean(HiddenHttpMethodFilter.class) public OrderedHiddenHttpMethodFilter hiddenHttpMethodFilter() { return new OrderedHiddenHttpMethodFilter(); }
@ConditionalOnMissingBean 这个条件注解起了关键作用, 如果不存在这个Bean 就创建这个bean
正是因为这个自动配置, 这程序使用的时候, 不需要@Autowires 就可以直接使用