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

Spring Boot 2.7.0版本更新了自动化配置注册方式,新增@AutoConfiguration注解,并支持两种配置模式:传统的spring.factories及新的AutoConfiguration.imports。通过SpringFactoriesLoader和ImportCandidates实现新老配置兼容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作为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

### Spring Boot 中 `spring.factories` 文件的作用 `spring.factories` 是 Spring Boot 的核心配置文件之一,主要用于实现自动配置机制和框架扩展功能[^1]。此文件位于 JAR 包内的 `META-INF/spring.factories` 路径下。 #### 自动化配置支持 通过 `spring.factories` 文件,开发者能够定义一系列与应用程序启动和运行有关的关键类。当 Spring Boot 应用程序初始化时会读取此类目下的条目,并依据所设定的内容完成相应的组件注册和服务激活操作[^3]。 例如,在默认情况下,Spring Boot 使用该文件来加载各种内置特性: ```properties org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\ org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,... ``` 上述代码片段展示了如何利用逗号分隔的形式列举多个待启用的自动化配置类名称列表。 #### 扩展能力增强 除了辅助构建过程外,`spring.factories` 还允许第三方库轻松集成至现有项目之中而不必修改源码结构或引入额外依赖项。只要遵循既定格式向其中添加必要的元数据信息即可达成目的。 对于希望被识别为条件判断处理器(即实现了 Condition 接口的对象),则可以通过如下方式声明: ```properties org.springframework.context.annotation.Condition=com.example.MyCustomCondition ``` 这表明每当遇到带有特定属性标记(@ConditionalOnProperty, @ConditionalOnClass 等)的方法调用时都会触发自定义逻辑执行流程验证是否满足预期前提条件[^2]。 ### 配置实例展示 假设有一个名为 my-library.jar 的外部模块想要将自己的服务纳入到主工程的服务发现体系当中,则可以在其内部创建一个 `META-INF/spring.factories` 文本资源文件并将下面内容写入进去: ```properties # 定义要自动装配的 Bean 类型 org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.mycompany.library.LibraryServiceConfig # 注册新的事件监听器类型 org.springframework.context.ApplicationListener=com.mycompany.library.EventLoggingListener ``` 这样做的好处在于无需改动任何地方就能使新加入的功能模块无缝衔接进来并正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值