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 就可以直接使用
本文详细解析了SpringBoot中自动配置的过程,从@SpringBootApplication到@Import的实现机制,再到通过SpringFactoriesLoader加载META-INF/spring.factories文件中的配置类。介绍了如何通过@ConditionalOnMissingBean在未发现指定Bean时进行自动配置。
3124

被折叠的 条评论
为什么被折叠?



