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 就可以直接使用