Spring 的這一年 - 2024年12月31日

工程 | Josh Long | 2024年12月31日 | ...

各位 Spring 粉絲們好!新年快樂!歡迎來到新一期的《Spring 的這一年》!

過去的一年...

我在馬提尼克島(法屬加勒比海的一個美麗的島國)一間俯瞰美麗叢林的桌子前寫下本期文章。我正品嚐著 馬提尼克朗姆酒,享受著半悶熱的天氣,回想著 2024 年。自 2011 年以來,每年這個時候,我都會寫下《Spring 的這一年》,從後視鏡中回顧這一年。

這一年發生了太多精彩的事情。很難只挑出其中一件。但是,我將嘗試將其範圍縮小。至五件事。就像我一直做的那樣。

和往常一樣,下面還有本週回顧。

那麼從何開始呢?請記住,這旨在回顧那些最令人印象深刻的事情。那些最讓我驚歎的事情。而不是某個特定事物的最新進展回顧。有很多符合條件的神奇事物。讓我們直接深入瞭解它們。

Spring AI

來吧。你肯定預料到了。我可是 Spring AI 的貢獻者之一!它超級棒,並且每時每刻都在變得更好!Spring AI 是一個全面的框架,用於端到端整合 AI 工程的常見模式。它透過利用 Spring 的四大支柱:AOP、可移植服務抽象、依賴注入和自動配置,為構建 AI 驅動的系統和服務提供了強大的支援。

而且,它甚至走在了許多令人驚歎的新協議的前沿,例如 MCP(模型上下文協議),它允許您將任意資料來源與您的 LLM 模型整合。Spring AI MCP(至少目前)是 Spring AI 的一個子專案,使得生產和消費 MCP 服務都變得非常簡單。

在中文裡,“愛”字是 ai。“我”字是 'wo'。所以:我愛 AI

Spring Modulith

聽著,我最大的抱怨之一就是看到許多程式碼庫似乎違背了良好的面向物件設計原則,使用諸如 app.controllersapp.servicesapp.modelsapp.repositories 等包結構。為了讓這種方案奏效,每種型別(除了控制器之外)都需要是 public 的。為什麼?這是一個反模式!如果你打算把所有東西都設為 public,為什麼要使用一門優秀的面嚮物件語言呢?面向物件的全部意義在於資訊隱藏。如果你想讓所有東西都有效地成為 public,在一個扁平的全域性名稱空間中,那乾脆用 C 語言好了!至少那樣更誠實一些?

但是有哪些替代方案呢?有很多其他方法可以/將指導您構建更清晰的架構,其中我最喜歡的一個就是 Spring Modulith。Spring Modulith 為您提供了使用 Spring 構建清晰、模組化程式碼庫的工具。它擴充套件了框架,增加了基礎設施,使得模組解耦更加容易。而且,透過使用約定以及 ArchUnit 支援的測試,它可以讓您在 Java 語言之上擴充套件一個新的層級和級別的驗證,以確保您不會無意中將一個根包(一個“模組”)的實現細節暴露給另一個包。

相信我(我成為貢獻者是有原因的!):一旦你使用了 Spring Modulith,你就不會想回去了!你的程式碼將更清晰,長期來看架構會更好,而且你會更有信心,不會意外地向其他潛在依賴者做出你無法兌現的承諾!

Spring gRPC

這是一個新的實驗性專案(但它已經在 Spring Initializr 上了!),它讓您可以使用 Spring Boot 快速輕鬆地構建 GraalVM 就緒的 gRPC 服務!您只需在 proto 資料夾中定義您的 proto 服務定義。您還需要知道什麼?訪問 start.spring.io,選擇 gRPC,然後點選生成。使用您的構建工具構建專案,它將生成服務的存根,然後在 Spring Boot 專案中實現這些存根。如果您以通常的方式執行生成的 jar,它將以通常的方式直接繫結 gRPC 到一個埠。如果您的類路徑中有 spring-boot-starter-web,它將透過 servlet 基礎設施暴露 gRPC 服務。如果您有 Actuator,它將提供有關您的服務的指標。而且,很快,如果您使用 spring-boot-starter-security,它將允許您保護您的服務。當然,如果您在 Spring Initializr 上選擇 graalvm,它將允許您將應用程式編譯成 GraalVM 原生二進位制檔案!太棒了現在就試試吧(我會在新年製作一個影片!)

Spring Security

我無法形容最近 Spring Security 帶給我的深刻印象。它已經是一個集安全性、身份驗證和授權於一體的一站式解決方案。但它變得越來越易用和出色。其最新版本 6.4 包括了對以下方面的新增或增強支援:

  • 完整的 OAuth 套件:OAuth 客戶端、OAuth 資源伺服器
  • 神奇密碼:使用者點選連結即可立即登入
  • WebAuthn/通行金鑰(Passkeys)。想讓使用者只需透過人臉識別、指紋識別或外接 USB 金鑰就能登入您的服務嗎?就是它了!

別忘了,Spring Authorization Server 也一直在變得越來越好!最新版本使得搭建一個授權伺服器變得輕而易舉。對於常見情況,基本上就是一行程式碼搞定!您甚至可以混搭:擁有一個 Spring Authorization Server,允許人們重定向 OAuth 客戶端來處理身份驗證,然後讓他們使用指紋、神奇連結或任何其他方式進行身份驗證。太棒了!

效能

使用像 Spring 這樣的框架蘊含著巨大的機會,因為它介於您和底層執行時之間,這意味著如果我們——致力於 Spring 的開發人員——可以在框架層面進行最佳化,我們就可以做到這一點,並讓所有使用該框架的人受益。這是太好的成果,不容錯過!因此,我們一直在尋找可以用來改進您的應用程式的槓桿。今年也不例外。

今年,我們將努力更進一步。您可能知道,我們在 Spring Boot 中對 Project CRaC 有很好的支援。我們對 GraalVM 原生映象也有出色的支援。今年我們首次推出了整合的 AppCDS 支援,並預覽了 Project Leyden 支援。我在這裡做了一個影片,涵蓋了除了 Project Leyden 之外的所有這些選項。有關 Project Leyden 的詳細資訊,請檢視這個影片,該影片是與 Oracle 的 Java 團隊合作在 Devoxx Belgium 上展示的

加速!

好了,介紹了這五大亮點特性之後,讓我們來看看...

本週回顧!

這是本週來自這個最棒社群的新鮮事物和精彩內容,照例奉上!

我確信,我代表整個 Spring 團隊對您說:新年快樂,期待在 2025 年見到您!!

訂閱 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

快人一步

VMware 提供培訓和認證,助您加速前進。

瞭解更多

獲得支援

Tanzu Spring 透過一個簡單的訂閱提供對 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案。

瞭解更多

即將舉行的活動

檢視 Spring 社群所有即將舉行的活動。

檢視全部