1. 概述

随着 Spring Boot 3 发布临近,现在正是了解其新特性的好时机。本次升级不仅是版本迭代,更是技术栈的全面革新。

2. Java 17

Java 17 成为 Spring Boot 3 的基准版本。从 Java 11 迁移的开发者将获得显著的语言特性提升。以下重点介绍对 Spring 开发最有价值的新特性:

2.1. Records 类

Records (JEP 395) 提供了创建数据载体类的简洁方式(如 POJO/DTO):

public record Person (String name, String address) {}

踩坑提示:当前 Records 与 Bean Validation 集成存在限制,构造函数参数不支持验证注解(如 JSON 反序列化场景)。

2.2. 文本块

通过 JEP 378 实现多行文本,告别字符串拼接地狱:

String textBlock = """
Hello, this is a
multi-line
text block.
""";

2.3. Switch 表达式

Switch 表达式(Java 12+)简化条件判断:

DayOfWeek day = DayOfWeek.FRIDAY;
int numOfLetters = switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> 6;
    case TUESDAY                -> 7;
    case THURSDAY, SATURDAY     -> 8;
    case WEDNESDAY              -> 9;
};

2.4. 模式匹配

简化 instanceof 判断(Project Amber):

// instanceof 直接匹配
if (obj instanceof String s) {
    System.out.println(s.toLowerCase());
}

// switch 模式匹配
static double getDoubleUsingSwitch(Object o) {
    return switch (o) {
        case Integer i -> i.doubleValue();
        case Float f -> f.doubleValue();
        case String s -> Double.parseDouble(s);
        default -> 0d;
    };
}

2.5. 密封类

通过 sealed 限制继承范围:

public abstract sealed class Pet permits Dog, Cat {}

3. Jakarta EE 9

最重大的变化是 Java EE 到 Jakarta EE 9 的迁移,包名从 javax.* 变为 jakarta.*。典型影响:

// 旧版本
import javax.servlet.http.HttpServletRequest;

// 新版本
import jakarta.servlet.http.HttpServletRequest;

关键影响:

  • 所有直接使用 Java EE API 的代码需修改
  • 第三方库需兼容 Jakarta EE 9(如 Hibernate Validator 7+、Tomcat 10+)

4. 依赖版本要求

Spring Framework 6 和 Spring Boot 3 的最低依赖版本:

  • Kotlin 1.7+
  • Lombok 1.18.22+(需 JDK17 支持
  • Gradle 7.3+

5. 核心升级方向

两大重点:Native 可执行文件可观测性。Spring 生态通过三级支持实现:

  1. Spring Framework 提供核心抽象
  2. 子项目统一集成
  3. Spring Boot 自动配置

5.1. Native 可执行文件

Spring Native 正式并入 Spring 主线。AOT 编译现在通过 Maven 插件原生支持:

mvn spring-boot:aot-generate

升级亮点:

  • 无需额外插件
  • Native Hints 集成到 Spring 核心
  • 测试基础设施随 M5 版本提供

5.2. 可观测性

基于 Micrometer 和 Micrometer Tracing(原 Spring Cloud Sleuth)构建的观测体系:

graph LR
    A[应用] --> B[Micrometer]
    B --> C[指标收集]
    B --> D[分布式追踪]
    D --> E[OpenZipkin/OpenTelemetry]

Spring Boot 3 提供全套自动配置,所有 Spring 项目正通过新 Observation API 实现自观测。

6. Spring Web MVC 细节优化

6.1. RFC7807 问题详情支持

原生支持 RFC7807 问题详情标准,无需再依赖 Zalando Problem 等库。

6.2. HttpMethod 类升级

HttpMethod 从枚举改为类,支持扩展 HTTP 方法(如 WebDAV):

HttpMethod lock = HttpMethod.valueOf("LOCK");

6.3. 废弃组件清理

移除过时的 Servlet 集成:

  • Commons FileUpload → 改用 StandardServletMultipartResolver
  • Tiles 和 FreeMarker JSP 支持 → 改用 FreeMarker 模板视图

7. 项目迁移路径

推荐迁移步骤:

  1. 升级到 Spring Boot 2.7(官方迁移指南将基于此版本)
  2. 清理废弃代码和旧版配置文件处理
  3. 迁移到 Java 17
  4. 确认第三方库兼容 Jakarta EE 9
  5. 使用当前里程碑版本测试迁移

8. 总结

Spring Boot 3 迁移本质是三重升级:

  • Java 17 基线
  • Jakarta EE 9 生态
  • 原生编译与可观测性支持

收益最大化场景:需要极致启动性能(Native 编译)或深度监控(可观测性)的项目。

所有示例代码可在 GitHub 获取。


原始标题:Spring Boot 3 and Spring Framework 6.0 – What’s New | Baeldung