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 Module System)。為了在啟用模組的應用程式中使用,Spring Framework jar 帶有 Automatic-Module-Name
manifest 項目,這些項目定義了穩定的語言級模組名稱 (spring.core
、spring.context
等),這些名稱獨立於 jar 構件名稱。這些 jar 遵循相同的命名模式,使用 -
而不是 .
– 例如,spring-core
和 spring-context
。當然,Spring Framework 的 jar 在類別路徑上也能正常運作。
Spring 和 Spring Framework 的歷史
Spring 在 2003 年應運而生,是對早期 J2EE 規範複雜性的回應。雖然有些人認為 Java EE 及其現代繼任者 Jakarta EE 與 Spring 競爭,但實際上它們是互補的。Spring 程式設計模型不包含 Jakarta EE 平台規範;相反,它與傳統 EE umbrella 中精心挑選的個別規範整合
Spring Framework 也支援相依性注入 (JSR 330) 和 Common Annotations (JSR 250) 規範,應用程式開發人員可以選擇使用這些規範來代替 Spring Framework 提供的 Spring 特定機制。最初,這些機制基於常見的 javax
套件。
從 Spring Framework 6.0 開始,Spring 已升級到 Jakarta EE 9 級別(例如,Servlet 5.0+、JPA 3.0+),基於 jakarta
命名空間而不是傳統的 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,這些 API 可以跨越許多版本和多年。
-
為程式碼品質設定高標準。Spring Framework 強調有意義、最新且準確的 javadoc。它是極少數可以聲稱具有乾淨的程式碼結構且套件之間沒有循環相依性的專案之一。
回饋與貢獻
對於操作方法問題或診斷或偵錯問題,我們建議使用 Stack Overflow。按一下 這裡 以取得 Stack Overflow 上建議使用的標籤列表。如果您相當確定 Spring Framework 中存在問題,或想建議某項功能,請使用 GitHub Issues。
如果您心中有解決方案或建議的修復程式,您可以在 Github 上提交提取請求。但是,請記住,對於除了最微不足道的問題之外的所有問題,我們都希望在問題追蹤器中提交票證,以便進行討論並為將來參考留下記錄。
如需更多詳細資訊,請參閱 CONTRIBUTING 頂層專案頁面上的指南。
開始使用
如果您剛開始使用 Spring,您可能想要從建立基於 Spring Boot 的應用程式開始使用 Spring Framework。Spring Boot 提供了一種快速(且有主見)的方式來建立生產就緒的基於 Spring 的應用程式。它基於 Spring Framework,偏好慣例勝於組態,並且旨在讓您盡快啟動並執行。
您可以使用 start.spring.io 來產生基本專案,或遵循 「開始使用」指南 之一,例如 開始建置 RESTful Web 服務。除了更容易理解之外,這些指南還非常注重任務,而且大多數指南都基於 Spring Boot。它們還涵蓋了 Spring 作品集中的其他專案,您可能希望在解決特定問題時考慮這些專案。