参考https://zhuanlan.zhihu.com/p/136469945

- AutoConfigurationImportSelector类的selectImports方法返回一个String[],数组内存放需要自动装配的类全名,数组是从SpringFactoriesLoader中加载来的,SpringFactoriesLoader读取的是META-INF/spring.factories
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;
}
因为AutoConfigurationImportSelector实现了DeferredImportSelector,所以AutoConfigurationImportSelector类会根据selectImports方法的返回的数组值将类路径下 META-INF/spring.factories 里面配置的所有 EnableAutoConfiguration 的值加入到 Spring 容器中。
- 关于@AutoConfigurationPackage注解的作用,很多人误解它的作用是扫描启动类包及以下的所有bean并注册到spring容器中,其实不是,这是@ComponentScan注解在做的事。@AutoConfigurationPackage真正的作用一言蔽之就是:该注解的作用是向容器内注入一个组件 组件的作用是保存一些包路径
参考SpringBoot源码之-关于注解@AutoConfigurationPackage作用
本文详细介绍了Spring Boot的AutoConfigurationImportSelector类的工作原理,解释了它如何从META-INF/spring.factories加载自动配置类。同时澄清了@AutoConfigurationPackage注解的真实作用,它并不负责扫描并注册Bean,而是用于向容器添加特定包路径的引用,辅助自动配置。理解这些核心概念有助于更好地掌握Spring Boot的自动配置机制。

2211

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



