Spring 框架:Java 開發者的春天

ccm03發表於2024-10-29

一、關於Spring

1.1 簡介

Spring 框架是一個功能強大的開源框架,主要用於簡化 Java 企業級應用的開發,由被稱為“Spring 之父”的 Rod Johnson 於 2002 年提出並創立,並由Pivotal團隊維護。它提供了全面的基礎設施支援,使開發者能夠專注於業務邏輯而非底層細節。

46685819-7532-474c-adbd-3cf6fc0e3d99

Spring 自誕生以來備受青睞,一直被廣大開發人員作為 Java 企業級應用程式開發的首選。時至今日,Spring 儼然成為了 Java EE 代名詞,成為了構建 Java EE 應用的事實標準。

Spring官網: https://spring.io/

image

1.2 誕生與發展

誕生

關於Spring的發展起源要回溯到2002年,當時正是Java EE和EJB大行其道的時候,很多知名公司都是採用此技術方案進行專案開發。這時候有一個美國的小夥子認為 EJB 太過臃腫,並不是所有的專案都需要使用 EJB 這種大型框架,應該會有一種更好的方案來解決這個問題。

他為了證明自己的想法是正確的,在2001年10月寫了一本書《Expert One-on-One J2EE》,介紹了當時Java企業應用程式開發的情況,並指出了 Java EE 和 EJB 元件框架中存在的一些主要缺陷。在這本書中,他提出了一個基於普通 Java 類和依賴注入的更簡單的解決方案。在書中,他展示瞭如何在不使用 EJB 的情況下構建高質量、可擴充套件的線上座位預留系統。為了構建應用程式,他編寫了超過 30,000 行的基礎結構程式碼,專案中的根包命名為 com.interface21​,所以人們最初稱這套開源框架為 interface21,這就是 Spring 的前身。

image

這個小夥子是誰呢?他就是大名鼎鼎的 Rod Johnson(下圖),Rod Johnson 在悉尼大學不僅獲得了計算機學位,同時還獲得了音樂學位,更令人吃驚的是在回到軟體開發領域之前,他還獲得了音樂學的博士學位,反正就是牛逼哄哄的人物。但是現在 Rod Johnson 已經離開了 Spring(2012 年 Rod Johnson 宣佈他將要離開 Spring Source ),成為了一個天使投資人,同時也是多個公司的董事,早已走上人生巔峰。

image

Spring 框架的發展歷程可以追溯到2003年,當時由 Rod Johnson 建立併發布了第一個版本。Spring 的初衷是為了簡化企業級 Java 應用程式的開發,尤其是解決當時企業級應用開發中普遍存在的複雜性和耦合度高的問題。隨著時間的推移,Spring 不斷髮展壯大,成為了一個完整的生態系統,涵蓋了從核心的依賴注入和麵向切面程式設計到 Web 應用開發、資料訪問、安全、測試等多個領域。

發展

1. 初始版本(2003年)

  • 釋出:Spring 1.0 正式釋出。
  • 特點:主要集中於依賴注入(DI)和麵向切面程式設計(AOP),為 Java 開發者提供了一個簡潔的替代方案,減少了對 EJB 的依賴。

2. 穩定和成熟(2004-2006年)

  • Spring 2.0(2006年) :引入了對註解的支援,使得配置更加靈活,簡化了開發過程。
  • Spring MVC:增強了 Web 應用開發的功能,提供了強大的 Model-View-Controller 支援。

3. 整合與擴充套件(2007-2010年)

  • Spring 3.0(2009年) :引入了 RESTful Web 服務支援和 Java 5 的註解功能,進一步增強了框架的靈活性和易用性。
  • 與其他技術的整合:Spring 開始與 Hibernate、JPA、Quartz 等流行技術無縫整合,擴充套件了其生態系統。

4. 雲端計算和微服務時代(2011年至今)

  • Spring 4.0(2013年) :引入了對 Java 8 的支援,增加了對非同步程式設計和 WebSocket 的支援,適應現代應用需求。
  • Spring Boot(2014年) :釋出了 Spring Boot,極大地簡化了應用的開發和部署流程,促進了微服務架構的流行。
  • Spring Cloud(2015年) :為構建分散式系統提供了一整套解決方案,幫助開發者更輕鬆地管理微服務。

5. 持續演進

  • Spring 5.0(2017年) :引入了對反應式程式設計的支援,適應了現代應用對高併發和非同步處理的需求。
  • 生態系統的擴充套件:隨著 Kubernetes 和雲原生技術的發展,Spring 繼續演進以適應新的開發趨勢。

image

1.3 特點

Spring 框架以其靈活性、模組化和擴充套件性著稱,它具有許多顯著的特點,這些特點使得 Spring 成為 Java 開發者廣泛使用的開發框架之一。以下是 Spring 框架的一些主要特點:

  1. 控制反轉(IoC)容器

    • Spring提供了一個強大的IoC容器,用於管理物件的建立、生命週期、配置和其他物件的依賴關係。
  2. 依賴注入(DI)

    • Spring支援透過建構函式、setter方法和註解等方式實現依賴注入,從而降低元件之間的耦合度。
  3. 面向切面程式設計(AOP)

    • Spring AOP提供了一種宣告式的方式來實現橫切關注點,如日誌記錄、事務管理、安全性等。
  4. 事務管理

    • Spring提供了一個全面的事務管理抽象,支援程式設計式和宣告式事務管理,並且可以與不同的事務管理器(如JTA、JPA等)整合。
  5. 模組化和分層架構

    • Spring框架是高度模組化的,由多個模組組成,每個模組解決特定的問題,支援分層架構,如表示層、業務層、持久層等。
  6. 資料訪問抽象

    • Spring提供了對各種資料訪問技術的整合,包括JDBC、Hibernate、JPA、MyBatis等,並且簡化了資料庫操作。
  7. Web支援

    • Spring MVC是一個功能豐富的Web框架,用於構建Web應用程式和RESTful Web服務。Spring還支援WebSocket、Servlet、Portlet等Web技術。
  8. 安全性

    • Spring Security提供了一個全面的安全框架,用於保護基於Spring的應用程式。
  9. 測試支援

    • Spring提供了對各種測試框架的整合,如JUnit和TestNG,以及模擬物件的支援,使得單元測試和整合測試更加容易。
  10. 整合

    • Spring提供了對各種中介軟體、訊息傳遞系統(如JMS、AMQP)和其他企業級技術的整合。
  11. 配置管理

    • Spring支援多種配置方式,包括XML、Java註解和Java配置類,提供了靈活的配置選項。
  12. REST和微服務

    • Spring Boot和Spring Cloud提供了對構建RESTful服務和微服務架構的支援。
  13. 響應式程式設計

    • Spring 5引入了對響應式程式設計模型的支援,Spring WebFlux是一個響應式的Web框架,用於構建非阻塞的、事件驅動的服務。
  14. 雲原生支援

    • Spring Cloud提供了對雲平臺的整合,支援服務發現、配置管理、負載均衡、斷路器等雲原生特性。
  15. 社群和生態系統

    • Spring擁有一個活躍的社群和龐大的生態系統,提供了大量的擴充套件庫和第三方整合。
  16. 持續更新和維護

    • Spring框架定期釋出新版本,不斷引入新特性和改進,以適應不斷變化的技術環境。

‍1.4 應用場景

  1. 企業級應用
  • 傳統企業應用:Spring 可用於構建大型企業級應用,支援複雜的業務邏輯和資料處理。
  • Spring MVC:用於開發基於 Web 的企業應用,提供 MVC 架構,便於處理請求和響應。
  1. 微服務架構
  • Spring Boot:透過簡化配置,快速構建和部署微服務,適用於需要快速迭代和高可擴充套件性的專案。
  • Spring Cloud:提供服務發現、負載均衡、配置管理等工具,方便微服務之間的協調和管理。
  1. RESTful API
  • 構建 API 服務:利用 Spring MVC 構建 RESTful API,支援多種資料格式(如 JSON、XML)以供前端或其他服務呼叫。
  1. 資料訪問層
  • 整合 ORM 框架:透過 Spring Data 或與 Hibernate、JPA 等 ORM 框架的整合,簡化資料庫操作和資料訪問層的開發。
  1. 批處理應用
  • Spring Batch:專門用於處理大量資料的批處理應用,支援分片處理、事務管理和作業排程等功能。
  1. Web 應用
  • 企業級 Web 應用:適合開發高效能、可擴充套件的 Web 應用,支援使用者認證、許可權管理和事務處理。
  1. 單頁應用(SPA)後端
  • 與前端框架結合:作為後端服務支援 React、Angular 或 Vue 等單頁應用,提供資料介面和業務邏輯處理。
  1. 雲原生應用
  • 雲平臺部署:支援雲服務(如 AWS、Azure)的整合,使得應用能夠在雲環境中無縫執行。
  1. 安全性要求高的應用
  • Spring Security:用於處理使用者認證和許可權管理,適合需要高安全性的應用場景。
  1. IoT 應用
  • 物聯網系統:可以用於開發物聯網應用,處理裝置通訊和資料採集等需求。

二、Spring體系結構

2.1 概覽

Spring 有可能成為所有企業應用程式的一站式服務點,然而,Spring 是模組化的,允許你挑選和選擇適用於你的模組,不必要把剩餘部分也引入。下面的部分對在 Spring 框架中所有可用的模組給出了詳細的介紹。

Spring 框架提供約 20 個模組,可以根據應用程式的要求來使用。

Spring 體系結構

2.2 核心容器

核心容器由 spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spring 表示式語言,Spring Expression Language)等模組組成,它們的細節如下:

  • spring-core 模組提供了框架的基本組成部分,包括 IoC 和依賴注入功能。
  • spring-beans 模組提供 BeanFactory,工廠模式的微妙實現,它移除了編碼式單例的需要,並且可以把配置和依賴從實際編碼邏輯中解耦。
  • context 模組建立在由 corebeans 模組的基礎上建立起來的,它以一種類似於 JNDI 註冊的方式訪問物件。Context 模組繼承自 Bean 模組,並且新增了國際化(比如,使用資源束)、事件傳播、資源載入和透明地建立上下文(比如,透過 Servelet 容器)等功能。Context 模組也支援 Java EE 的功能,比如 EJB、JMX 和遠端呼叫等。ApplicationContext 介面是 Context 模組的焦點。spring-context-support 提供了對第三方整合到 Spring 上下文的支援,比如快取(EhCache, Guava, JCache)、郵件(JavaMail)、排程(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等。
  • spring-expression 模組提供了強大的表示式語言,用於在執行時查詢和操作物件圖。它是 JSP2.1 規範中定義的統一表示式語言的擴充套件,支援 set 和 get 屬性值、屬性賦值、方法呼叫、訪問陣列集合及索引的內容、邏輯算術運算、命名變數、透過名字從 Spring IoC 容器檢索物件,還支援列表的投影、選擇以及聚合等。

它們的完整依賴關係如下圖所示:

Spring 體系結構

對應的原始碼模組如下:

image-20241029012020791

2.3 資料訪問/整合

資料訪問/整合層包括 JDBC,ORM,OXM,JMS 和事務處理模組,它們的細節如下:

(注:JDBC=Java Data Base Connectivity,ORM=Object Relational Mapping,OXM=Object XML Mapping,JMS=Java Message Service)

  • JDBC 模組提供了 JDBC 抽象層,它消除了冗長的 JDBC 編碼和對資料庫供應商特定錯誤程式碼的解析。
  • ORM 模組提供了對流行的物件關係對映 API 的整合,包括 JPA、JDO 和 Hibernate 等。透過此模組可以讓這些 ORM 框架和 spring的其它功能整合,比如前面提及的事務管理。
  • OXM 模組提供了對 OXM 實現的支援,比如 JAXB、Castor、XML Beans、JiBX、XStream 等。
  • JMS 模組包含生產(produce)和消費(consume)訊息的功能。從 Spring 4.1 開始,整合了 spring-messaging 模組。
  • 事務模組為實現特殊介面類及所有的 POJO 支援程式設計式和宣告式事務管理。(注:程式設計式事務需要自己寫 beginTransaction()、commit()、rollback() 等事務管理方法,宣告式事務是透過註解或配置由 spring 自動處理,程式設計式事務粒度更細)

對應的原始碼模組如下:

image

2.4 Web模組

Web 層由 Web,Web-MVC,Web-Socket 和 Web-Portlet 組成,它們的細節如下:

  • Web 模組提供面向 web 的基本功能和麵向 web 的應用上下文,比如多部分(multipart)檔案上傳功能、使用 Servlet 監聽器初始化 IoC 容器等。它還包括 HTTP 客戶端以及 Spring 遠端呼叫中與 web 相關的部分。

  • Web-MVC 模組為 web 應用提供了模型檢視控制(MVC)和 REST Web服務的實現。Spring 的 MVC 框架可以使領域模型程式碼和 web 表單完全地分離,且可以與 Spring 框架的其它所有功能進行整合。

  • Web-Socket 模組為 WebSocket-based 提供了支援,而且在 web 應用程式中提供了客戶端和伺服器端之間通訊的兩種方式。

  • Webflux 模組: Spring WebFlux 是 Spring Framework 5.x中引入的新的響應式web框架。與Spring MVC不同,它不需要Servlet API,是完全非同步且非阻塞的,並且透過Reactor專案實現了Reactive Streams規範。Spring WebFlux 用於建立基於事件迴圈執行模型的完全非同步且非阻塞的應用程式。

對應的原始碼模組如下:

image

2.5 Test模組

Test 模組:Spring 支援 Junit 和 TestNG 測試框架,而且還額外提供了一些基於 Spring 的測試功能,比如在測試 Web 框架時,模擬 Http 請求的功能。

包含Mock Objects, TestContext Framework, Spring MVC Test, WebTestClient。

對應的原始碼模組如下:

Spring 框架:Java 開發者的春天

2.6 其他

還有其他一些重要的模組,像 AOP,Aspects,Instrumentation,Web 和測試模組,它們的細節如下:

  • AOP 模組提供了面向方面(切面)的程式設計實現,允許你定義方法攔截器和切入點對程式碼進行乾淨地解耦,從而使實現功能的程式碼徹底的解耦出來。使用原始碼級的後設資料,可以用類似於.Net屬性的方式合併行為資訊到程式碼中。
  • Aspects 模組提供了與 AspectJ 的整合,這是一個功能強大且成熟的面向切面程式設計(AOP)框架。
  • Instrumentation 模組在一定的應用伺服器中提供了類 instrumentation 的支援和類載入器的實現。
  • Messaging 模組為 STOMP 提供了支援作為在應用程式中 WebSocket 子協議的使用。它也支援一個註解程式設計模型,它是為了選路和處理來自 WebSocket 客戶端的 STOMP 資訊。
  • 測試模組支援對具有 JUnit 或 TestNG 框架的 Spring 元件的測試。

對應的原始碼模組如下:

image-20241029012125230

三、Spring下載

3.1 官方下載

進入如下連結,依次點開:Artifacts-->snapshot-->org-->springgframework-->spring

https://repo.spring.io/ui/repos/tree/General/snapshot

image

image

選擇需要的版本

image

開啟後選擇字尾為-dist.zip的下載即可

image

image

image

Spring的解壓檔案中有幾個資料夾:docs、libs、schema。

docs :該資料夾下包含Spring的相關文件、開發指南及API參考文件。
libs :所有的 Spring 庫都在這裡,在裡面我們會發現每個jar包都有三個不同字尾的檔案。
***.jar :位元組碼jar包
***-javadoc.jar :文件
***-sources.jar :原始碼
schema :所有的約束(xsd)檔案都在這裡。

附上一鍵點選直達地址:

https://repo.spring.io/ui/native/snapshot/org/springframework/spring/

image

3.2 Maven引入

要使用Spring,現在一般都是使用maven匯入spring的jar包去使用。而不用去專門下載jar包再匯入。

在Maven專案中新增如下依賴,引入Sping

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring</artifactId>
    <version>5.2.6.RELEASE</version>
    <type>pom</type>
</dependency>

image

相關文章