spring.factories将被弃用,做好Get新技能的准备了吗

作为springboot的忠实用户,最近springboot升级到了2.7.0版本,其中有一项是改变原来的自动化配置注册方式;如果你之前写过相关starter类或者研究过自动化配置的源码知道,配置自动化配置类需要在META-INF/spring.factories文件中配置配置类,而最新版本是配置META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中配置,不过目前是兼容两种配置模式共存。

官方标记已过期

在这里插入图片描述

新老版本比对
原配置方式当前配置方式
META-INF/spring.factoriesMETA-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@Configuration@AutoConfiguration

如果你自己写过自动化配置starter,那就赶快将注册方式有spring.factories方式更改为META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports。文件中的每一行代表了一个自动化配置类的全限定类名,查看自动化配置实例

springboot2.7.0目前会向后兼容老版本配置模式spring.factories。

最新注解@AutoConfiguration

新注解@AutoConfiguration是被用在META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports中的自动化配置类上用来替换@Configuration、@AutoConfigurationAfter、@AutoConfigurationBefore注解,其中@Configuration对应的proxyBeanMethods属性值一直为false。

新版本如何做到新老注册方式同时兼容?
  1. SpringFactoriesLoader用来加载spring.factories配置类
  2. ImportCandidates用来加载META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports配置文件;

看下其中一种场景AutoConfigurationExcludeFilter类兼容两种方案的源码:

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

springboot2.7.0最新文档https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.7-Release-Notes

GitHub地址:https://github.com/mingyang66/spring-parent

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值