Spring Framework 概述

Spring 使建立 Java 企業應用變得容易。它提供了在企業環境中擁抱 Java 語言所需的一切,支援 Groovy 和 Kotlin 作為 JVM 上的替代語言,並且具有根據應用需求建立多種架構的靈活性。從 Spring Framework 6.0 開始,Spring 要求使用 Java 17+。

Spring 支援廣泛的應用場景。在大型企業中,應用通常存在很長時間,並且必須在開發者無法控制升級週期的 JDK 和應用伺服器上執行。其他應用可能以內嵌伺服器的單個 jar 形式執行,可能在雲環境中。還有一些可能是獨立的應用程式(例如批處理或整合工作負載),不需要伺服器。

Spring 是開源的。它擁有一個龐大而活躍的社群,根據各種實際用例提供持續反饋。這幫助 Spring 在漫長的歲月中成功演進。

“Spring” 的含義

術語 “Spring” 在不同上下文中具有不同的含義。它可以指 Spring Framework 專案本身,這是它的起點。隨著時間的推移,許多其他 Spring 專案已經構建在 Spring Framework 之上。通常,當人們說 “Spring” 時,他們指的是整個專案家族。本參考文件重點介紹基礎:Spring Framework 本身。

Spring Framework 被劃分為模組。應用可以選擇需要的模組。其核心是核心容器模組,包括配置模型和依賴注入機制。除此之外,Spring Framework 為不同的應用架構提供了基礎支援,包括訊息、事務資料和持久化以及 Web。它還包括基於 Servlet 的 Spring MVC Web 框架,以及並行存在的 Spring WebFlux 響應式 Web 框架。

關於模組的說明:Spring Framework 的 jar 包允許部署到模組路徑 (Java 模組系統)。對於在啟用模組的應用中使用,Spring Framework 的 jar 包帶有 Automatic-Module-Name manifest 條目,它們定義了獨立於 jar 工件名稱的穩定的語言級別模組名稱(例如 spring.core, spring.context 等)。jar 包遵循相同的命名模式,但使用 - 代替 .,例如 spring-corespring-context。當然,Spring Framework 的 jar 包在類路徑上也能正常工作。

Spring 和 Spring Framework 的歷史

Spring 誕生於 2003 年,旨在應對早期 J2EE 規範的複雜性。雖然有些人認為 Java EE 及其現代繼任者 Jakarta EE 與 Spring 存在競爭,但它們實際上是互補的。Spring 程式設計模型不擁抱 Jakarta EE 平臺規範;相反,它集成了傳統 EE 傘形下的精心挑選的各個規範

Spring Framework 還支援依賴注入 (JSR 330) 和通用註解 (JSR 250) 規範,應用開發者可以選擇使用它們,而不是 Spring Framework 提供的 Spring 特定機制。最初,這些是基於常用的 javax 包。

從 Spring Framework 6.0 開始,Spring 已升級到 Jakarta EE 9 級別(例如,Servlet 5.0+,JPA 3.0+),基於 jakarta namespace 而非傳統的 javax 包。以 EE 9 作為最低版本並已支援 EE 10,Spring 準備為 Jakarta EE API 的進一步演進提供開箱即用的支援。Spring Framework 6.0 完全相容 Tomcat 10.1、Jetty 11 和 Undertow 2.3 等 Web 伺服器,以及 Hibernate ORM 6.1。

隨著時間的推移,Java/Jakarta EE 在應用開發中的作用已經演變。在 J2EE 和 Spring 的早期,應用是建立並部署到應用伺服器的。如今,藉助 Spring Boot,應用以 DevOps 友好和雲友好的方式建立,內嵌 Servlet 容器且易於更改。從 Spring Framework 5 開始,WebFlux 應用甚至不直接使用 Servlet API,可以在非 Servlet 容器(例如 Netty)的伺服器上執行。

Spring 不斷創新和演進。除了 Spring Framework,還有其他專案,例如 Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch 等等。重要的是要記住,每個專案都有自己的原始碼倉庫、問題跟蹤器和釋出週期。請訪問 spring.io/projects 檢視完整的 Spring 專案列表。

設計理念

當您學習一個框架時,不僅要了解它做什麼,還要了解它遵循的原則。以下是 Spring Framework 的指導原則:

  • 在每個層面提供選擇。Spring 允許您儘可能晚地延遲設計決策。例如,您可以透過配置切換持久化提供者而無需更改程式碼。許多其他基礎設施問題以及與第三方 API 的整合也是如此。

  • 適應不同的視角。Spring 具有靈活性,對於事情應該如何做並不固執己見。它支援具有不同視角的廣泛應用需求。

  • 保持強大的向後相容性。Spring 的演進經過精心管理,以儘量減少版本之間的破壞性更改。Spring 支援精心選擇的 JDK 版本範圍和第三方庫,以方便依賴 Spring 的應用和庫的維護。

  • 關注 API 設計。Spring 團隊投入大量思考和時間來設計直觀且能在多個版本和多年中保持穩定的 API。

  • 設定高標準的程式碼質量。Spring Framework 非常重視有意義、最新且準確的 javadoc。它是少數幾個可以聲稱程式碼結構清晰、包之間沒有迴圈依賴的專案之一。

反饋和貢獻

對於操作方法問題或診斷、除錯問題,我們建議使用 Stack Overflow。點選此處檢視 Stack Overflow 上建議使用的標籤列表。如果您相當確定 Spring Framework 中存在問題或想建議一個功能,請使用 GitHub Issues

如果您有解決方案或建議的修復方法,可以在 Github 上提交 pull request。但是,請記住,除了最微小的問題外,我們希望在問題跟蹤器中提交一個工單,以便在那裡進行討論並留下記錄供將來參考。

更多詳細資訊請參閱 CONTRIBUTING 頂級專案頁面上的指南。

入門

如果您剛開始使用 Spring,您可能希望透過建立一個基於 Spring Boot 的應用來開始使用 Spring Framework。Spring Boot 提供了一種快速(且規範)的方式來建立生產就緒的基於 Spring 的應用。它基於 Spring Framework,偏愛約定優於配置,旨在讓您儘快上手。

您可以使用 start.spring.io 生成一個基本專案,或者遵循其中一個“入門”指南,例如構建 RESTful Web 服務入門。這些指南不僅更容易理解,而且非常注重任務,並且大多數都基於 Spring Boot。它們還涵蓋了 Spring 組合中的其他專案,您在解決特定問題時可能需要考慮這些專案。