知識庫 / Spring / Spring Boot RSS 訂閱

Spring Boot 3 和 Spring Framework 6.0 新功能介紹

Spring Boot
HongKong
6
11:52 AM · Dec 06 ,2025

1. 概述

在 Spring Boot 3.0 發佈前僅剩不久的時間內,現在是時候瞭解一下新功能了。 Spring Boot 3.0 的發佈即將來臨。

2. Java 17

雖然之前已經有對 Java 17 的支持,但此次 LTS 版本才真正確立了基礎。

當從 LTS 版本 11 遷移時,Java 開發人員將受益於新的語言特性。由於 Java 本身不是本文討論的主題,我們將僅列出對 Spring Boot 開發人員最重要的新特性。有關 Java 17、16、15、14、13 和 12 的詳細信息,請參閲單獨的文章。

2.1. 記錄

Java 記錄(JEP 395,參見 Java 14 記錄關鍵字)旨在作為快速創建數據載體類的手段,即那些僅僅用於存儲數據並將其在模塊之間傳輸的類,也稱為 POJO(Plain Old Java Object)和 DTO(數據傳輸對象)。

我們可以輕鬆創建不可變 DTO:

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

目前,在將它們與 Bean Validation 結合使用時,需要格外小心,因為驗證約束不支持在構造參數上,例如在 JSON 反序列化(Jackson)創建實例並將它作為參數放入控制器方法中時。

2.2. 文本塊

藉助 JEP 378,現在可以創建多行文本塊,而無需在換行處連接字符串:

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

2.3. 表達式語句

Java 12 引入了表達式語句 (JEP 361),它(就像所有表達式一樣)評估單個值,並且可以用於語句。 相比於使用嵌套的 <em >if</em >–<em >else</em >> 運算符,現在我們可以使用 <em >switch</em >–<em >case</em >> 結構:

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. 模式匹配

模式匹配是在 Project Amber 中發展起來的,並最終融入了 Java 語言。在 Java 語言中,它們可以幫助簡化對 instanceof 類型的評估。

我們可以直接使用它們與 instanceof 結合使用:

if (obj instanceof String s) {
    System.out.println(s.toLowerCase());
}

我們也可以在 switchcase 語句中使用它:

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. 密封類和接口

密封類可以限制繼承,通過指定允許的子類來實現:

public abstract sealed class Pet permits Dog, Cat {}

我們可以在 Java 中的密封類和接口中找到更多詳細信息。

3. Jakarta EE 9

最重要的一項變更可能是從 Java EE 遷移到 Jakarta EE 9,此時包命名空間從 javax. 變為 jakarta.。因此,我們每次使用 Java EE 類時,都需要在代碼中調整所有導入語句。

例如,在 Spring MVC 控制器中訪問 HttpServletRequest 對象時,我們需要替換為:

import javax.servlet.http.HttpServletRequest;
<p>with:</p>
import jakarta.servlet.http.HttpServletRequest;

當然,我們並不經常需要使用 Servlet API 的類型,但如果使用 Bean 驗證和 JPA,則不可避免。

使用依賴 Java/Jakarta EE 的外部庫時,我們也應該對此有所瞭解(例如,我們必須使用 Hibernate Validator 7+、Tomcat 10+ 和 Jetty 11+)。

4. 進一步依賴

Spring Framework 6 和 Spring Boot 3 需要以下最小版本:

5. 關鍵要點

以下兩個主題受到了特別關注:原生可執行文件可觀測性。 “Overarching” 表示:

  • Spring 框架引入核心抽象
  • 投資組合項目始終與之集成
  • Spring Boot 提供自動配置

5.1. 本地可執行文件

構建本地可執行文件並將其部署到 GraalVM 優先級更高。因此,Spring Native 項目正在 逐步整合到 Spring 框架本身

對於 AOT 生成,無需包含單獨的插件,我們可以直接使用 spring-boot-maven-plugin 中的一項 新目標

// 這是一個示例代碼塊,用於説明註釋的翻譯
public class Example {
    // This is a comment in the code.
    public void myMethod() {
        // This is another comment.
    }
}
mvn spring-boot:aot-generate

原生提示也將成為 Spring 核心的一部分。 此處的測試基礎設施將在里程碑 5(v6.0.0-M5)可用。

5.2. 可觀測性

Spring 6 引入了 Spring 可觀測性 – 一個基於 Micrometer 和 Micrometer Tracing (前身為 Spring Cloud Sleuth) 的新舉措。 其目標是利用 Micrometer 高效地記錄應用程序指標,並通過提供者(例如 OpenZipkinOpenTelemetry)實現追蹤。

Spring Boot 3 中對這些功能都進行了自動配置,Spring 項目正在利用新的 Observation API 來自動實現自身 Instrumentation。

關於此項內容,可以參考專門的文章獲取更多詳情。

6. Spring Web MVC 中的小改進

最重要的新功能之一是對 RFC7807(問題詳情標準)的支持。現在我們無需包含單獨的庫,如 Zalando Problem。

另一個小改進是,HttpMethod 不再是一個枚舉,而是一個類,允許我們創建實例以支持擴展的 HTTP 方法,例如 WebDAV 中定義的:

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

至少有一些過時的基於servlet的集成將被棄用,例如 Commons FileUpload(我們應該使用 StandardServletMultipartResolver  用於多部分文件上傳),Tiles,以及 FreeMarker JSP 支持(我們應該使用 FreeMarker 模板視圖代替)。

7. 項目遷移

以下是一些關於項目遷移的注意事項。推薦的步驟如下:

  1. 遷移到 Spring Boot 2.7 (當 Spring Boot 3 發佈時,將提供基於 Spring Boot 2.7 的遷移指南)
  2. 檢查已棄用的代碼使用情況和遺留的配置文件處理方式;這些將在新主版本發佈時被移除
  3. 遷移到 Java 17
  4. 檢查第三方項目是否具有 Jakarta EE 9 兼容的發佈版本
  5. 由於 Spring Boot 3 尚未發佈,我們可以嘗試使用當前的里程碑版本 Spring Boot 3.0.0-M4 Release Notes 以進行測試

8. 結論

正如我們所學到的,遷移到 Spring Boot 3 和 Spring 6 也意味着遷移到 Java 17 和 Jakarta EE 9。 如果我們高度重視可觀測性和原生可執行文件,那麼即將發佈的重大版本將為我們帶來最大的收益。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.