當spring boot 升級到2.7.0版本,其中有一項是變更是改變原來的自動化配置注入方式;
以前版本:
- 自動化配置類需要在META/spring.factories文件中配置配置類
- @Configuration
最新版本:
- 自動化配置類是配置在META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中配置
- @AutoConfiguration
目前兼容兩種配置模式共存.
@AutoConfiguration 介紹
@AutoConfiguration是被用在META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
中的自動化配置類上用來替註解,其中@Configuration
對應的proxyBeanMethods屬性值一直爲false。
新老方式如何同時兼容?
- SpringFactoriesLoader用來加載spring.factories配置類
- ImportCandidates用來加載META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports配置文件;
AutoConfigrationExcludeFilter類兼容兩種方案的源碼:
protected List<String> getAutoConfigurations() {
if (this.autoConfigurations == null) {
List<String> autoConfigurations = new ArrayList<>(
SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class, this.beanClassLoader));
ImportCandidates.load(AutoConfiguration.class, this.beanClassLoader).forEach(autoConfigurations::add);
this.autoConfigurations = autoConfigurations;
}
return this.autoConfigurations;
}