1 Spring 框架概述
- 2020 年 5 月 17 日
- 筆記
- Spring框架官方文檔
Spring 框架概述
Version 5.2.6.RELEASE
Spring使創建Java企業級應用變得更加容易。它提供了在企業環境中擁抱Java語言開發所需的一切。Groovy和Kotlin作為JVM上的可選語言,Spring也提供了良好支援,Spring也能根據應用程式的需要靈活地創建多種架構。從Spring 5.1開始,Spring需要JDK 8+(Java SE 8+),並對JDK 11 LTS提供了開箱即用支援。作為Java 8的最低修補程式版本,建議將Java SE 8更新到60版本,但一般建議使用最近的修補程式版本。
Spring支援廣泛的應用場景。在大型企業中,應用程式往往存在很長時間,且必須在升級周期不受開發人員控制的JDK和應用程式伺服器上運行。有些應用程式可能是以單個jar的形式嵌入伺服器運行,也有可能是在雲環境中運行。還有一些可能是獨立的應用程式(如批處理或集成工作負載),不需要在伺服器中運行。
Spring是開源的。 它擁有一個龐大而活躍的社區,可以根據各種實際用例提供持續的回饋。 這幫助了Spring在很長一段時間內得到成功發展。
1 我們所說的 “Spring “是什麼意思
“Spring “這個詞在不同的語境下有不同的含義。它可以用來指Spring框架項目本身,也就是整個Spring的起源。隨著時間的推移,其他的Spring項目都以Spring框架為基礎。大多數情況下,當人們說 “Spring “時,他們指的是整個Spring項目家族。本參考文檔主要關注的是基礎:Spring框架本身。
Spring框架分為多個模組。應用程式可以選擇他們需要哪些模組。核心容器是模組的核心,包括配置模型和依賴注入機制。除此之外,Spring框架還為不同的應用架構提供了基礎支援,包括消息傳遞、數據的事務和持久化以及web支援。它還包括基於Servlet的Spring MVC Web框架,同時還包括Spring WebFlux reactive Web框架。
關於此模組的說明。Spring 的框架相關jar包允許部署到 JDK 9 的模組路徑下(”Jigsaw”)。為了支援Jigsaw應用程式的使用,Spring Framework 5 相關jar包附帶了 “Automatic-Module-Name “清單條目,它定義了獨立於jar artifact名稱的穩定語言級模組名稱(”spring.core”、”spring.context “等),(jar遵循相同的命名模式,只是用”-「代替」.”,例如 “spring-core “和 “spring-context”)。當然,Spring框架的jar包在JDK 8和9+的classpath上都能正常工作。
2. Spring和Spring框架的歷史
作為對早期J2EE規範的複雜性的回應,Spring於2003年誕生。雖然有些人認為Java EE和Spring是競爭關係,但實際上Spring是對Java EE的補充。Spring 編程模型並不包含Java EE平台規範;相反,它與Java EE保護傘中精心挑選的特別規範進行了整合。
- Servlet API (JSR 340)
- WebSocket API (JSR 356)
- Concurrency Utilities (JSR 236)
- JSON Binding API (JSR 367)
- Bean Validation (JSR 303)
- JPA (JSR 338)
- JMS (JSR 914)
- 以及必要時用於事務協調的JTA / JCA設置。
Spring框架還支援依賴注入(JSR 330)和通用注釋(JSR 250)規範,應用程式開發人員可以選擇使用這些規範來代替Spring框架提供的Spring特有的機制。
從Spring Framework 5.0開始,Spring至少需要Java EE 7級別(如Servlet 3.1+、JPA 2.1+),同時在運行時遇到Java EE 8級別的新API(如Servlet 4.0、JSON Binding API)時,Spring也提供了開箱即用的集成。這使得Spring與Tomcat 8和9、WebSphere 9以及JBoss EAP 7等完全兼容。
隨著時間的推移,Java EE在應用程式開發中的作用也在不斷發展。在Java EE和Spring的早期,應用程式創建後是為了部署到應用伺服器上。如今,在Spring Boot的幫助下,應用程式是以Devops和雲端友好的方式創建的,嵌入了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 項目列表。
3. 設計理念
當你了解一個框架的時候,不僅要知道它的作用,而且要知道它所遵循的原則。以下是Spring框架的指導原則。
在每個層次上提供選擇。Spring讓你儘可能推遲設計決策。例如,您可以在不更改程式碼的情況下通過配置切換持久化提供程式。對於許多其他基礎架構問題以及與第三方API的集成也是如此。
適應不同的需求。Spring 擁抱靈活性,對事情應該如何做並不主觀臆斷。它支援各種不同角度的應用需求。
保持強大的向後兼容性。Spring的演進經過精心的管理,以使各個版本之間幾乎沒有重大變化。Spring支援一系列精心挑選的JDK版本和第三方庫,以方便維護依賴Spring的應用程式和庫。
關心API的設計。Spring團隊花了大量的心思和時間來製作通俗易懂,並在許多版本和多年的時間裡都能一直使用的API。
為程式碼品質設定了高標準。Spring框架非常強調有意義的、最新的、準確的javadoc。它是極少數能夠聲稱程式碼結構乾淨且包之間沒有循環依賴的項目之一。
4.回饋和貢獻
對於如何提出問題、診斷或調試問題,我們建議使用StackOverflow,並且有一個問題頁面列出了建議使用的標籤。如果您相當肯定Spring框架中存在問題,或者想推薦一個功能,請使用GitHub問題頁面。
如果你有一個解決方案或建議的修復方法,你可以在Github上提交一個pull request。但是,請記住,除了最瑣碎的問題,我們希望在問題跟蹤器中提交一個單子,在該跟蹤器中進行討論並保留記錄以備將來參考。
更多詳情請參見 CONTRIBUTING 的頂層項目頁面上的指南。
5.開始使用
如果您剛剛開始使用Spring,您可能希望創建一個基於Spring Boot的應用程式來開始使用Spring框架。Spring Boot提供了一種快速(且是建議的)方法來創建一個基於Spring的生產型應用程式。它基於Spring框架,偏向於約定而非配置,旨在讓你儘快啟動和運行。
你可以使用start.spring.io生成一個基本的項目,或者按照 “入門 “指南之一,如 “入門構建RESTful Web服務”。除了更容易理解之外,這些指南還非常注重任務實踐,且大多數都是基於Spring Boot。它們還涵蓋了Spring組合中的其他項目,你在解決某個特定問題時可能會考慮到這些項目。