写点什么

Spring Framework 7 和 Spring Boot 4 引入 API 版本控制、韧性和 Null-Safe 注解

作者:Karsten Silz

  • 2025-11-25
    北京
  • 本文字数:2721 字

    阅读完需:约 9 分钟

大小:1.34M时长:07:47
Spring Framework 7和Spring Boot 4引入API版本控制、韧性和Null-Safe注解

Broadcom 在 2025 年 11 月发布了Spring Framework 7.0(参见版本发布的博客文章)和Spring Boot 4.0(参加版本发布的博客文章)。新一代的版本推出了一流的 REST API 版本控制、基于 JSpecify 注解实现 Spring 产品组合中标准化的空值安全、内置的韧性功能(如重试和并发限制)。Spring Boot 4 迁移到了 Jackson 3 进行 JSON 处理,并将单体的自动化配置 JAR 拆分成了多个模块。Spring Framework 7 保持 JDK 17 作为基线,同时支持JDK 25,同时采用 Jakarta EE 11 和 Kotlin 2.2 作为新的基线。

 

现在,新的API版本控制功能在 Spring MVC 和 Spring WebFlux 中均已可用。框架支持基于路径、头信息、查询参数和媒体类型的版本控制策略。控制器通过ApiVersionStrategy进行配置,并在映射上直接声明版本,例如:

@GetMapping(url = "/accounts/{id}", version = "1.1"
复制代码

 

它们还具备符合 RFC 9745 规范的内置弃用处理功能。RestClientWebClient和 HTTP 接口客户端使用了 ApiVersionInserter,非反应式的RestTestClient(7.0 中新加入)和WebTestClient也是如此。ApiVersionStrategyApiVersionInserter都是 Spring Framework 的一部分,可供所有在 Spring 上运行的库和应用程序使用。

 

Spring Framework 7 完成了向标准化JSpecify注解的迁移,以实现 Spring 产品组合中的空值安全性。JSpecify联盟包括 OpenJDK、Broadcom、Google、JetBrains 和 Sonar。@Nullable@NonNull注解适用于标准和泛型类型、数组和可变参数元素。Kotlin 2 会自动将 JSpecify 注解转换为 Kotlin 的 nullability。IntelliJ IDEA 2025.3 通过全面覆盖提供了一流的支持,包括复杂的数据流分析。NullAway项目的构建期检查至少需要 JDK 21,不过对 JDK 17 的支持可能会提供。

 

Spring Retry中的韧性特性已经转移到了 Spring Framework 7 中。@Retryable注解提供了声明式重试支持,它能自动适应反应式方法、指数退避(back-off)和抖动。@ConcurrencyLimit注解启用了声明式并发控制,特别是与虚拟线程一起使用时非常有价值。

 

Jackson 3 主要的破坏性变更是包的迁移,从 com.fasterxml.jackson 迁移到了 tools.jackson。现在推荐的 JSON 映射器是JsonMapper,它取代了ObjectMapper并提供了不可变性和特定格式的映射器。默认的序列化行为变更将MapperFeature.SORT_PROPERTIES_ALPHABETICALLY设置为trueDateTimeFeature.WRITE_DATES_AS_TIMESTAMPS设置为false,这将日期序列化为 ISO-8601 字符串。应用程序仍然可以使用已弃用的 Jackson 2,甚至可以同时使用 Jackson 2 和 3。

 

Spring Boot 4 将自动化配置进行了模块化:增加了许多特定技术的模块,如spring-boot-starter-webmvcspring-boot-starter-webmvc-test,取代了原来的两个单体spring-boot-autoconfigurespring-boot-test-autoconfigure JAR。这减少了应用程序占用的空间,并防止 IDE 自动完成建议未使用的类或配置属性。

 

新版本保持了原有的 JDK 17 基线,正如 Spring Framework 项目负责人Juergen Hoeller在 2024 年 11 月告诉InfoQ的那样,这是因为“当前的行业共识显然是围绕 Java 17 基线的”。但 Spring 拥抱了 JDK 25 及其所有的特性。Jakarta EE 基线从版本 9 升级到了版本11。这带来了 Jakarta Servlet 6.1、Jakarta WebSocket 2.2、Jakarta Validation 3.1 和 Jakarta Persistence 3.2。它还提供了对 Hibernate ORM 7.1 的支持,该版本不再允许分离的实体重新与持久化上下文关联。Spring Boot 4 目前不支持 Undertow Web 服务器,因为它与 Jakarta Servlet 6.1 还不兼容。

 

新的HTTP接口组(HTTP Interface Groups)允许应用程序一次配置多个 HTTP 接口客户端,并让它们共享同一个RestClient。Spring Framework 7.1(预计在 2026 年 11 月)将弃用RestTemplate类,转而支持RestClient接口,而 Spring Framework 8(日期待定)将移除RestTemplateHTTP服务客户端(HTTP Service Client)的增强包括新的HttpServiceProxyRegistry接口(作为HttpServiceProxyFactory类之上新的一层),以及使用HttpServiceGroupConfigurer bean 方法为 HTTP 服务组配置 HTTP 客户端的能力。HttpStatus类现在包含了新的HTTP状态代码

 

其他改进包括:Spring Boot 4 支持 Gradle 9;Spring Security 7支持了多要素认证;Kotlin Serialization 的改进,包括一个新的spring-boot-kotlin-serialization模块和相应的spring-boot-kotlin-serialization-starter;提供了一个流畅的JmsClient;Spring for Apache Kafka 4.0 为 Kafka 队列增加了Share Consumer支持,这可以在一个组中的多个消费者之间分配记录,而传统上每个分区属于单个消费者;任务调度/执行自动配置支持多个TaskDecorator bean;基于AntPathMatcher进行 HTTP 映射被弃用,请使用PathPattern;Spring Boot 3.x 中弃用的类、方法和属性被移除;不再支持javax.annotationjavax.inject包中定义的注解,需要将它们替换为与它们作用相同的jakarta.annotationjakarta.inject注解。

 

进一步的改进还包括:应用程序上下文在不使用时现在会暂停,这在大型测试套件中会节省内存;Spring Framework 7 切换到了 GraalVM Native Image 的单文件可达性元数据格式;Spring Data 在构建时编译符合条件的仓库查询,以实现更快的启动;MongoDB 健康指标不再需要 Spring Data MongoDB;新的spring-boot-starter-opentelemetry包含了 OTLP 指标和追踪导出的所有依赖项;SSL 健康响应中新增的expiringChains条目会显示通过management.health.ssl.certificate-validity-warning-threshold属性配置的阈值内到期的证书链,这样的证书链会包含一个或多个证书。

 

值得注意的第三方依赖项升级包括 Kotlin 2.2.20、Tomcat 11.0、Jetty 12.1、GraphQL 24、Kafka 4.1.0、Elasticsearch Client 9.1、Hibernate Validator 9.0、Commons Lang3 3.19.0、Liquibase 5.0、Flyway 11.11、MongoDB 5.6.0、Mockito 5.20 和 TestContainers 2.0。

 

与 Spring Framework 7.0 和 Spring Boot 4.0 同步发布的版本包括Spring Cloud 2025.1.0Spring for GraphQL 2.0Spring Shell 4.0.0Spring REST Docs 4.0Spring Security 7.0Spring Data 2025.1.1.0Spring Session 4.0.0Spring Integration 7.0Spring Batch 6.0Spring AMQP 4.0Spring for Apache Kafka 4.0 Spring for Apache Pulsar 2.0Spring Web Services 5.0Spring Vault 4.0Spring Modulith 2.0

 

Spring Boot 4迁移指南能够帮助开发人员迁移到新版本最后一个Spring Boot 3版本,即 Spring Boot 3.5,将获得免费版本直到 2026 年 6 月,付费版本直到 2032 年 6 月。更多详细信息可以在 Spring Framework 7Spring Boot 4的完整发布说明中找到。

 

查看英文原文: Spring Framework 7 and Spring Boot 4 Deliver API Versioning, Resilience, and Null-Safe Annotations

2025-11-25 11:573797

评论

发布
暂无评论

Linux内核四大核心框架

hanaper

Go 专栏|基础数据类型:整数、浮点数、复数、布尔值和字符串

AlwaysBeta

Go 语言

从一个并发异常问题引起的想法

卢卡多多

并发编程 9月日更

【LeetCode】 二叉树中和为某一值的路径Java题解

Albert

算法 LeetCode 9月日更

Java + opencv 实现图片修复(图片去水印)

张音乐

Java OpenCV 音视频 9月日更 图片去水印

Go 专栏|复合数据类型:字典 map 和 结构体 struct

AlwaysBeta

Go 语言

在线JSON转JAVA工具

入门小站

工具

Linux之lastlog命令

入门小站

Linux

【Vue2.x 源码学习】第四十三篇 - 组件部分 - 组件相关流程总结

Brave

源码 vue2 9月日更

升级mysql-connector-java-8.x踩坑纪实

小江

Java MySQL 时间戳 服务器时区 夏令时

链路压测中各接口性能统计

FunTester

性能测试 测试框架 测试开发 FunTester 链路测试

Go 专栏|变量和常量的声明与赋值

AlwaysBeta

Go 语言

Go 专栏|流程控制,一网打尽

AlwaysBeta

Go 语言

Electron团队为什么要干掉remote模块

刘晓伦

Electron Node

Go 专栏|复合数据类型:数组和切片 slice

AlwaysBeta

Go 语言

多线程知识体系01-线程池源码阅读讲解-Executor

小马哥

多线程 高并发 源码阅读 源码剖析 日更

模块(二)如何设计架构

我是一只小小鸟

【HTML5游戏】从敲打空格键开始

devpoint

HTML5游戏 9月日更

ShardingSphere 语句解析生成初探

源码 ShardingSphere

未来10年,5个C/C++吃香的细分领域技术

奔着腾讯去

云原生 网络安全 音视频 DPDK 虚拟化技术

LeetCode刷题278-简单-第一个错误版本

ベ布小禅

9月日更

(深入篇)漫游语音识别技术—带你走进语音识别技术的世界

RTE开发者社区

深度学习 音视频 语音识别

Go 专栏|说说方法

AlwaysBeta

Go 语言

线程同步类CyclicBarrier在性能测试集合点应用

FunTester

多线程 性能测试 线程安全 测试框架 FunTester

HTTP系列之:HTTP中的cookies

程序那些事

Java 网络协议 HTTP cookies

Go 专栏|函数那些事

AlwaysBeta

Go 语言

Go 专栏|错误处理:defer,panic 和 recover

AlwaysBeta

Go 语言

【报名】飞桨中国行丨企业零门槛AI创新应用-智能制造专场

百度大脑

人工智能

Go 专栏|接口 interface

AlwaysBeta

Go 语言

【Flutter 专题】58 图解 Flutter 嵌入原生 AndroidView 小尝试

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

Vue进阶(九十):过滤器

No Silver Bullet

Vue 9月日更

Spring Framework 7和Spring Boot 4引入API版本控制、韧性和Null-Safe注解_后端_InfoQ精选文章