走進Java介面測試之流行框架SpringBoot(概念篇)
引言
說起 SpringBoot 不得不先了解一下 Spring 這個企業,不僅因為 Spring Boot 來源於 Spring 大家族,而是 Spring Boot 的誕生和 Sping 框架的發展息息相關。
Spring 歷史
2002 年正是 Java EE 和 EJB 大行其道的時候,很多知名公司都是採用此技術方案進行專案開發。一個美國的小夥子 Rod Johnson 認為 EJB 太過臃腫,並不是所有的專案都需要使用 EJB 這種大型框架,應該會有一種更好的方案來解決這個問題。於是他寫了一本書《 Expert One-on-One J2EE 》,介紹了當時 Java 企業應用程式開發的情況,並指出了 Java EE 和 EJB 元件框架中存在的一些主要缺陷。在這本書中他提出了一個基於普通 Java 類和依賴注入的更簡單的解決方案,這也就是 Spring 的前身。
隨後 Spring 發展進入快車道:
-
2004 年 03 月,1.0 版釋出。
-
2006 年 10 月,2.0 版釋出。
-
2007 年 11 月更名為 SpringSource,同時釋出了 Spring 2.5。
-
2009 年 12 月,Spring 3.0 釋出。
-
2013 年 12 月,Pivotal 宣佈釋出 Spring 框架 4.0。
-
2017 年 09 月,Spring 5.0 釋出。
Spring 1.x 時代
在 Spring1.x 時代,都是通過 xml 檔案配置 bean,隨著專案的不斷擴大,需要將 xml 配置分放到不同的配置檔案中,需要頻繁的在 java 類和xml 配置檔案中切換。
Spring 2.x 時代
隨著 JDK 1.5 帶來的註解支援,Spring2.x 可以使用註解對 Bean 進行申明和注入,大大的減少了 xml 配置檔案,同時也大大簡化了專案的開發。 那麼,問題來了,究竟是應該使用 xml 還是註解呢?
最佳實踐:
-
應用的基本配置用 xml,比如:資料來源、資原始檔等;
-
業務開發用註解,比如:Service 中注入 bean 等;
Spring 3.x 到 Spring 4.x
從 Spring3.x 開始提供了 Java 配置方式,使用 Java 配置方式可以更好的理解你配置的 Bean,並且 Spring4.x 和SpringBoot 都推薦使用 java 配置的方式
在Java開發領域,Sping 應用很廣,它的極致目標是簡化Java開發,從2003年嶄露頭角至今,估計連 Rod Johnson 本人都沒有想到,在 Java 領域,它會產生如此深遠的影響。
SpringBoot 的誕生
隨著使用 Spring 進行開發的個人和企業越來越多,Spring 也從單一簡潔的小框架變成一個大而全的開源軟體,Spring 的邊界不斷擴充,到了後來 Spring 幾乎可以做任何事情了,可以集成了市面上主流的開源軟體、中介軟體。 而Spring 每整合一個開源軟體,就需要增加一些基礎配置,慢慢的隨著開發的專案越來越龐大,往往需要整合很多開源軟體,因此後期使用 Spring 開發大型專案需要引入很多配置檔案,太多的配置非常難以理解,並容易配置出錯,到了後來人們甚至稱 Spring 為配置災難。
什麼是Springboot
在上述環境下,SpringBoot 應運而生。它使用“習慣優於配置”(專案中存在大量的配置,此外還內建一個習慣性的配置,讓你無須手動進行配置)的理念讓 Java 專案快速執行起來。使用 SpringBoot 很容易建立一個獨立執行(執行 Jar ,內嵌 Servlet 容器)、準生產級別的基於 Spring 的框架專案,使用 SpringBoot 你可以不用或者只需要很少的 Spring 配置。 用白話來理解,就是 SpringBoot 其實不是什麼新框架,它預設配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,SpringBoot 整合了幾乎所有的框架。
SpringBoot 特點
-
使用 Spring 專案引導頁面可以在幾秒構建一個專案
-
非常簡潔的安全策略整合
-
支援關係資料庫和非關係資料庫
-
支援執行期內嵌容器,如 Tomcat、Jetty
-
強大的開發包,支援熱啟動
-
自動管理依賴
-
自帶應用監控
-
支援各種 IDE,如 IntelliJ IDEA 、NetBeans
SpringBoot 優勢
SpringBoot 開發更簡單
SpringBoot 對開發效率的提升是全方位的,我們可以簡單做一下對比:
使用 Spring 我們開發一個 web 專案需要做哪些工作:
1)配置 web.xml,載入 Spring 和 Spring mvc
2)配置資料庫連線、配置 Spring 事務
3)配置載入配置檔案的讀取,開啟註解
4)配置日誌檔案
…
n) 配置完成之後部署 tomcat 除錯 可能你還需要考慮各個版本的相容性,jar 包衝突的各種可行性。
那麼使用 SpringBoot 之後我們需要開發一個 web 專案需要哪些操作呢?
-
登入網址 http://start.spring.io/ 選擇對應的元件直接下載
-
匯入專案,直接開發
上面的 N 步和下面的 2 步形成巨大的反差,這僅僅只是在開發環境搭建方面。
SpringBoot 測試更簡單
SpringBoot 對測試的支援強大,SpringBoot 內建了 7 種強大的測試框架:
-
JUnit: 一個 Java 語言的單元測試框架
-
Spring Test & SpringBoot Test:為 Spring Boot 應用提供整合測試和工具支援
-
AssertJ:支援流式斷言的 Java 測試框架
-
Hamcrest:一個匹配器庫
-
Mockito:一個 java mock 框架
-
JSONassert:一個針對 JSON 的斷言庫
-
JsonPath:JSON XPath 庫
只需要在專案中引入 spring-boot-starter-test 依賴包,就可以對資料庫、Mock、 Web 等各種情況進行測試。
SpringBoot 配置更簡單
SpringBoot 的核心思想: 約定優於配置 。
約定優於配置(convention over configuration),也稱作按約定程式設計,是一種軟體設計正規化,旨在減少軟體開發人員需做決定的數量,獲得簡單的好處,而又不失靈活性。
本質是說,開發人員僅需規定應用中不符約定的部分。例如,如果模型中有個名為 User 的類,那麼資料庫中對應的表就會預設命名為 user。只有在偏離這一約定時,例如將該表命名為 ”user_info”,才需寫有關這個名字的配置。
SpringBoot 部署更簡單
SpringBoot 內嵌容器,不僅僅讓部署變得簡單,其實在開發除錯階段也非常便利,對比以往 Spring 開發 Web 專案時配置 Tomcat 的繁瑣。使用 SpringBoot 開發 Web 專案,讓我們不需要關心容器的環境問題,專心寫業務程式碼即可。
Jenkins 是目前持續構建領域使用最廣泛的工具之一,使用 Jenkins 部署 SpringBoot 專案非常簡單,大家想繼續瞭解可以參考的文章: OA==&mid=2247484589&idx=1&sn=dc929ec19ca9cc2830c8029c13bfaf73&chksm=973dd648a04a5f5e8572e7ce19a893447da69b0f0cb6d52847286305cafc671e3ffa65557c7a&scene=21#wechat_redirect" rel="nofollow,noindex" target="_blank">效能環境之Jenkins+Maven自動化部署SpringBoot壓測環境(Docker篇) ,只需要前期做一些簡單的配置,所以 SpringBoot + Docker + Jenkins 會將 SpringBoot 專案的部署做得更簡單。
Spring 、SpringBoot 和 SpringCloud 的關係
Spring 兩大核心功能 Ioc 和 Aop 成就了 Spring,Spring 在這兩大核心的功能上不斷的發展,才有了 Spring 事務、Spring Mvc 等一系列偉大的產品,最終成就了 Spring 帝國,到了後期 Spring 幾乎可以解決企業開發中的所有問題。
SpringBoot 是在強大的 Spring 帝國生態基礎上面發展而來,發明 Spring Boot 不是為了取代 Spring ,是為了讓人們更容易的使用 Spring 。所以說沒有 Spring 強大的功能和生態,就不會有現在的 SpringBoot 火熱, SpringBoot 使用 約定優於配置 的理念,重新重構了 Spring 的使用,讓 Spring 後續的發展更有生命力。
Spring Cloud 是一系列框架的有序集合。它利用 SpringBoot 的開發便利性巧妙地簡化了分散式系統基礎設施的開發,如服務發現註冊、配置中心、訊息匯流排、負載均衡、斷路器、資料監控等,都可以用 SpringBoot 的開發風格做到一鍵啟動和部署。
Spring 並沒有重複製造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過 SpringBoot 風格進行再封裝遮蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分散式系統開發工具包。
Spring Cloud 是為了解決微服務架構中服務治理而提供的一系列功能的開發框架,並且 Spring Cloud 是完全基於 SpringBoot 而開發,Spring Cloud 利用 SpringBoot 特性整合了開源行業中優秀的元件,整體對外提供了一套在微服務架構中服務治理的解決方案。

綜上所述,正是由於 Spring Ioc 和 Spring Aop 兩個強大的功能才有了 Spring ,Spring 生態不斷的發展才有了 SpringBoot ,使用 SpringBoot 讓 Spring 更易用更靈活,Spring Cloud 是基於 SpringBoot 開發的一套微服務架構下的服務治理方案。
用一個簡單的包含關係來表達它們之間的關係。
Spring ioc/aop > Spring > Spring Boot > Spring Cloud
小結
天下“武功”,為快不破。好的開源軟體也應該如此,SpringBoot 的出現正是讓 Java 程式設計變得更簡單、更快速。