Java Springboot之Spring傢族的技術體系

一、Why

Spring Boot 在傳統 Spring 框架的基礎上做瞭創新和優化,將開發人員從以往煩瑣的配置工作中解放出來,並提供瞭大量即插即用的集成化組件,從而解決瞭各種組件之間復雜的整合過程,大大提高瞭開發效率,降低瞭維護成本。

比如, 原本使用的是 Spring MVC 框架, 在整個開發過程中,除瞭需要編寫一大堆配置文件、針對每個層次引入專門的開發組件外,還需要獨立部署和管理應用服務器。最後,為瞭對系統的運行狀態進行有效監控,還需要引入一些並不好用的外部框架。

而使用瞭 Spring Boot 框架,因為它直接解決瞭使配置 、 編程 、 部署 、 監控 ,好用、簡單又高效。

越來越強大的 Spring Boot 儼然是 Java EE 領域的標準開發框架瞭。熟練掌握 Spring Boot 中的各項技術組件,並能夠在一定程度上掌握其內部運行機制,是從事 Java 應用程序開發的基本要求,也是學習 Spring Cloud 等微服務開發框架的基礎。

二、Spring 傢族技術生態全景圖

Spring 框架自 2003 年由 Rod Johnson 設計並實現以來,經歷瞭多個重大版本的發展和演進,已經形成瞭一個龐大的傢族式技術生態圈。目前,Spring 已經是 Java EE 領域最流行的開發框架,在全球各大企業中都得到瞭廣泛應用。

讓我們先來看一下 Spring 傢族技術生態的全景圖。

訪問 下Spring 的官方網站 https://spring.io/

在這裡插入圖片描述

從圖中可以看到,這裡羅列瞭 Spring 框架的七大核心技術體系,分別是微服務架構、響應式編程、雲原生、Web 應用、Serverless 架構、事件驅動以及批處理

這些技術體系各自獨立但也有一定交集,例如微服務架構往往會與基於 Spring Cloud 的雲原生技術結合在一起使用,而微服務架構的構建過程也需要依賴於能夠提供 RESTful 風格的 Web 應用程序等。

另一方面,在具備特定的技術特點之外,這些技術體系也各有其應用場景。

舉個例子

  • 如果我們想要實現日常報表等輕量級的批處理任務,而又不想引入 Hadoop 這套龐大的離線處理平臺時,使用基於 Spring Batch 的批處理框架是一個不錯的選擇
  • 如果想要實現與 Kafka、RabbitMQ 等各種主流消息中間件之間的集成,屏蔽這些中間件在使用上的差別,那麼使用基於 Spring Cloud Stream 的事件驅動架構對外提供瞭統一的 API, 屏蔽瞭內部各個中間件在實現上的差異性。

在日常開發過程中,如果構建單塊 Web 服務,可以采用 Spring Boot。如果想要開發微服務架構,那麼就需要使用基於 Spring Boot 的 Spring Cloud,而 Spring Cloud 同樣內置瞭基於 Spring Cloud Stream 的事件驅動架構。

同時, 特別強調的是響應式編程技術。響應式編程是 Spring 5 引入的最大創新,代表瞭一種系統架構設計和實現的技術方向。因此,我們也將從 Spring Boot、Spring Cloud 以及 Spring 響應式編程這三個技術體系進行切入,看看 Spring 具體能夠為我們解決開發過程中的哪些問題。

三、Spring Framework 的整體架構

當然,所有我們現在能看到的 Spring 傢族技術體系都是在 Spring Framework 基礎上逐步演進而來的。在介紹上述技術體系之前,我們先簡單瞭解下 Spring Framework 的整體架構,如下圖所示:

【4.x】

在這裡插入圖片描述

四、Spring Boot 與 Web 應用程序

Spring Boot 構建在 Spring Framework 基礎之上,是新一代的 Web 應用程序開發框架。

我們可以通過下面這張圖來瞭解 Spring Boot 的全貌:

在這裡插入圖片描述

通過瀏覽 Spring 的官方網站,我們可以看到 Spring Boot 已經成為 Spring 中頂級的子項目。自 2014 年 4 月發佈 1.0.0 版本以來,Spring Boot 儼然已經發展為 Java EE 領域開發 Web 應用程序的首選框架。

先來感受一下使用 Spring Boot 開發一個 RESTful風格 的 HTTP 端點所需要做的編碼工作,如下所示:

@SpringBootApplication

@RestController

public class DemoApplication {
 
    @GetMapping("/helloworld")

	public String hello() { 

	    return "Hello World!";

	}

 

	public static void main(String[] args) {

        SpringApplication.run(DemoApplication.class, args);

    }

}

一個經典的“Hello World”程序,而且使用 Spring Boot 來構建這樣一個支持 RESTful 風格的 Web 應用程序隻需要幾秒鐘。

一旦創建瞭一個 Spring Boot 應用程序,並添加類似上面的 DemoApplication 類,我們就可以啟動 Spring Boot 內置的 Web 服務器並監聽 8080 端口,剩餘的一切工作 Spring Boot 都幫你自動完成瞭。

五、支持運行期內嵌容器(傳統 Web 容器& 非阻塞式容器)

Spring Boot 具備瞭傳統 Spring 框架所不具備的功能特性,即支持運行期內嵌容器(包含 Tomcat、Jetty 等支持 Servlet 規范的多款傳統 Web 容器)

在最新的 Spring Boot 2.X 版本中,還提供瞭對 Netty 以及集成 Servlet 3.1+ 的非阻塞式容器的支持。基於運行期內嵌容器機制

開發人員想要啟動Web 服務隻需要使用一行 java –jar 命令就可以瞭。

在這裡插入圖片描述

六、自動配置

我們還發現 Spring Boot 的核心功能就是自動配置

我們可以看到 Spring Boot 並沒有像以前使用 Spring MVC 一樣需要指定一大堆關於 HTTP 請求和響應的 XML 配置。

事實上,Spring Boot 的運行過程同樣還是依賴於 Spring MVC,但是它把原本需要開發人員指定的各種配置項設置瞭默認值,並內置在瞭運行時環境中,例如默認的服務器端口就是 8080,如果我們不需要對這些配置項有定制化需求,就可以不做任何的處理,采用既定的開發約定即可。這就是 Spring Boot 所倡導的約定優於配置(Convention over Configuration)設計理念

在這裡插入圖片描述

七、內置的監控機制

另外,相較傳統的 Spring 框架,Spring Boot 的一大亮點是引入瞭內置的監控機制,這是通過 Actuator 組件(常見的包括內存信息、JVM 信息、垃圾回收信息等)來實現的。基於 Actuator 組件,一方面我們可以查看包含自動配置在內的應用程序詳細信息,另一方面可以實時監控該應用程序的運行時健康狀態。

在這裡插入圖片描述

可以看到,Spring Boot 的上述功能實際上從多個維度簡化瞭 Web 應用程序的開關過程,這些維度包含編碼、配置、部署和監控等。

八、Spring Cloud (Netflix)與微服務架構

Spring Cloud 構建在 Spring Boot 基礎之上,它的整體架構圖如下所示:

在這裡插入圖片描述

技術組件的完備性是 Spring Cloud 框架的主要優勢,它集成瞭業界一大批知名的微服務開發組件。Spring Cloud 的核心組件如下圖所示

在這裡插入圖片描述

可以看到,基於 Spring Boot 的開發便利性,Spring Cloud 巧妙地簡化瞭微服務系統基礎設施的開發過程,Spring Cloud 包含上圖中所展示的服務發現註冊、API 網關、配置中心、消息總線、負載均衡、熔斷器、數據監控等

九、Spring 5 與響應式編程

隨著 Spring 5 的正式發佈,我們迎來瞭響應式編程(Reactive Programming)的全新發展時期。Spring 5 中內嵌瞭與數據管理相關的響應式數據訪問、與系統集成相關的響應式消息通信以及與 Web 服務相關的響應式 Web 框架等多種響應式組件,從而極大地簡化瞭響應式應用程序的開發過程和開發難度。

下圖展示瞭響應式編程的技術棧與傳統的 Servlet 技術棧之間的對比:

在這裡插入圖片描述

從上圖可以看到,上圖左側為基於 Spring WebFlux 的技術棧,右側為基於 Spring MVC 的技術棧。我們知道傳統的 Spring MVC 構建在 Java EE 的 Servlet 標準之上,該標準本身就是阻塞式和同步的,而 Spring WebFlux 基於響應式流,因此可以用來構建異步非阻塞的服務

在 Spring 5 中,選取瞭 Project Reactor 作為響應式流的實現庫。由於響應式編程的特性,Spring WebFlux 和 Project Reactor 的運行需要依賴於諸如 Netty 和 Undertow 等支持異步機制的容器。同時我們也可以選擇使用較新版本的 Tomcat 和 Jetty 作為運行環境,因為它們支持異步 I/O 的 Servlet 3.1

下圖更加明顯地展示瞭 Spring MVC 和 Spring WebFlux 之間的區別和聯系:

在這裡插入圖片描述

在基於 Spring Boot 以及 Spring Cloud 的應用程序中,Spring WebFlux 和 Spring MVC 可以混合進行使用。

十、小結

我們主要圍繞 Spring Boot 框架展開討論,分別從配置體系、數據訪問、Web 服務、消息通信、系統安全、系統監控、應用測試等維度對該框架進行深入的剖析,所采用的版本為 2.2.X 版。

系統分析瞭 Spring 傢族的技術生態,並重點介紹瞭 Spring Boot、Spring Cloud 和 Spring 響應式編程這三大技術體系。從技術演進的過程和趨勢而言,這些工具和框架的出現有其必然性。Spring Boot 是對傳統 Spring MVC 的改進,Spring Cloud 基於 Spring Boot 構建微服務架構,而響應式編程則代表未來技術的發展方向。

到此這篇關於Java Springboot之Spring傢族的技術體系的文章就介紹到這瞭,更多相關Spring傢族的技術體系內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: