Spring 框架概述
Spring 使得建立 Java 企業應用程式變得容易。它提供了在企業環境中擁抱 Java 語言所需的一切,支援 Groovy 和 Kotlin 作為 JVM 上的替代語言,並具有根據應用程式需求建立多種架構的靈活性。自 Spring Framework 6.0 起,Spring 要求 Java 17+。
Spring 支援廣泛的應用程式場景。在大型企業中,應用程式通常存在很長時間,並且必須在 JDK 和應用程式伺服器上執行,而它們的升級週期超出了開發人員的控制。其他應用程式可能以單個 jar 形式執行,嵌入伺服器,可能在雲環境中。還有一些可能是獨立應用程式(例如批處理或整合工作負載),不需要伺服器。
Spring 是開源的。它擁有一個龐大而活躍的社群,根據各種真實世界的用例提供持續反饋。這使得 Spring 能夠長期成功發展。
我們所說的“Spring”是什麼意思
“Spring”一詞在不同的上下文中含義不同。它可以指 Spring 框架專案本身,這是它開始的地方。隨著時間的推移,其他 Spring 專案是在 Spring 框架之上構建的。最常見的是,當人們說“Spring”時,他們指的是整個專案家族。本參考文件側重於基礎:Spring 框架本身。
Spring 框架分為模組。應用程式可以選擇它們需要的模組。核心是核心容器模組,包括配置模型和依賴注入機制。除此之外,Spring 框架為不同的應用程式架構提供了基礎支援,包括訊息傳遞、事務資料和永續性以及 Web。它還包括基於 Servlet 的 Spring MVC Web 框架,以及並行執行的 Spring WebFlux 反應式 Web 框架。
關於模組的說明:Spring Framework 的 jar 包允許部署到模組路徑 (Java Module System)。為了在啟用模組的應用程式中使用,Spring Framework jar 包附帶了 Automatic-Module-Name 清單條目,這些條目定義了獨立於 jar 工件名稱的穩定的語言級別模組名稱(例如 spring.core、spring.context 等)。這些 jar 包遵循相同的命名模式,使用 - 代替 .,例如 spring-core 和 spring-context。當然,Spring Framework 的 jar 包在 classpath 上也能正常工作。
Spring 和 Spring 框架的歷史
Spring 於 2003 年應運而生,以應對早期 J2EE 規範的複雜性。雖然有些人認為 Java EE 及其現代繼承者 Jakarta EE 與 Spring 存在競爭,但它們實際上是互補的。Spring 程式設計模型不包含 Jakarta EE 平臺規範;相反,它與傳統 EE 傘形下的精選個別規範整合
Spring 框架還支援依賴注入 (JSR 330) 和通用註解 (JSR 250) 規範,應用程式開發人員可以選擇使用這些規範,而不是 Spring 框架提供的特定於 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 等 Web 伺服器完全相容,也與 Hibernate ORM 6.1 相容。
隨著時間的推移,Java/Jakarta EE 在應用程式開發中的作用發生了演變。在 J2EE 和 Spring 的早期,應用程式是為了部署到應用程式伺服器而建立的。如今,在 Spring Boot 的幫助下,應用程式以適應開發運營和雲的方式建立,嵌入式 Servlet 容器易於更改。自 Spring Framework 5 起,WebFlux 應用程式甚至不直接使用 Servlet API,並且可以在非 Servlet 容器的伺服器(例如 Netty)上執行。
Spring 持續創新和發展。除了 Spring 框架,還有其他專案,如 Spring Boot、Spring Security、Spring Data、Spring Cloud、Spring Batch 等。重要的是要記住,每個專案都有自己的原始碼倉庫、問題跟蹤器和釋出節奏。請參閱 spring.io/projects 獲取 Spring 專案的完整列表。
設計理念
當您學習一個框架時,不僅要了解它的功能,還要了解它遵循的原則。以下是 Spring 框架的指導原則
-
在每個層面提供選擇。Spring 允許您儘可能晚地推遲設計決策。例如,您可以透過配置切換持久化提供程式,而無需更改程式碼。對於許多其他基礎設施問題以及與第三方 API 的整合也是如此。
-
適應不同視角。Spring 擁抱靈活性,不拘泥於某一種做事方式。它以不同的視角支援廣泛的應用程式需求。
-
保持強大的向後相容性。Spring 的演進經過精心管理,以強制在版本之間進行少量重大更改。Spring 支援精心選擇的 JDK 版本和第三方庫範圍,以方便維護依賴於 Spring 的應用程式和庫。
-
關注 API 設計。Spring 團隊在建立直觀且能夠在多個版本和多年中保持穩定的 API 方面投入了大量思考和時間。
-
為程式碼質量設定高標準。Spring Framework 非常重視有意義、當前和準確的 javadoc。它是少數幾個可以聲稱具有乾淨程式碼結構且包之間沒有迴圈依賴的專案之一。
反饋和貢獻
對於操作方法問題或診斷或除錯問題,我們建議使用 Stack Overflow。點選此處獲取 Stack Overflow 上建議使用的標籤列表。如果您非常確定 Spring Framework 中存在問題或想建議一個功能,請使用 GitHub Issues。
如果您有解決方案或建議的修復方法,可以在 Github 上提交拉取請求。但是,請記住,對於除最微不足道的問題之外的所有問題,我們期望在問題跟蹤器中提交一個工單,在那裡進行討論並留下記錄以供將來參考。
有關更多詳細資訊,請參閱 CONTRIBUTING 頂級專案頁面上的指南。
入門
如果您剛開始使用 Spring,您可能希望透過建立基於 Spring Boot 的應用程式來開始使用 Spring 框架。Spring Boot 提供了一種快速(且有主見)的方式來建立生產就緒的基於 Spring 的應用程式。它基於 Spring 框架,傾向於約定優於配置,旨在讓您儘快啟動並執行。
您可以使用 start.spring.io 生成一個基本專案,或遵循其中一個 “入門”指南,例如 入門構建 RESTful Web 服務。這些指南不僅更容易理解,而且非常注重任務,並且大多數都基於 Spring Boot。它們還涵蓋了 Spring 組合中您在解決特定問題時可能需要考慮的其他專案。