当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;
}