spring.factories将被废弃,你的spring-boot-starter-X还好吗?

当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。

新老方式如何同时兼容?

  1. SpringFactoriesLoader用来加载spring.factories配置类
  2. 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;
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章