認識一個東西我們先來試着回答三個經典的問題問題,是什么?為什么?怎么樣?
是什么
在介紹 SpringBoot 之前我們首先來簡單介紹一下 Spring。Spring 是誕生於2002年的 Java 開發框架,可以說已經成為 Java 開發的事實標准。所謂事實標准就是雖然 Java 官方沒有說它就是開發標准,但是在當前 Java 開發的眾多項目中,當我們談到產品級的 Java 項目的時候,大多都是基於 Spring 或者應用了 Spring 特性的。
Spring 基於 IOC 和 AOP 兩個特性對 Java 開發本身進行了大大的簡化。但是一個大型的項目需要集成很多其他組件,比如一個 WEB 項目,至少要集成 MVC 框架、Tomcat 這種 WEB 容器、日志框架、ORM框架,連接數據庫要選擇連接池吧……使用 Spring 的話每集成一個組件都要去先寫它的配置文件,比較繁瑣且容易出錯。
然后就有了SpringBoot。
Spring Boot 是由 Pivotal 團隊提供的全新框架,2014 年 4 月發布 Spring Boot 1.0 2018 年 3 月 Spring Boot 2.0發布。它是對spring的進一步封裝,其設計目的是用來簡化 Spring 應用的初始搭建以及開發過程。怎么簡化的呢?就是通過封裝、抽象、提供默認配置等方式讓我們更容易使用。
SpringBoot 基於 Spring 開發。SpringBoot 本身並不提供 Spring 框架的核心特性以及擴展功能,也就是說,它並不是用來替代 Spring 的解決方案,而是和 Spring 框架緊密結合用於提升 Spring 開發者體驗的工具。
關於 SpringBoot 有一句很出名的話就是約定大於配置。采用 Spring Boot 可以大大的簡化開發模式,它集成了大量常用的第三方庫配置,所有你想集成的常用框架,它都有對應的組件支持,例如 Redis、MongoDB、Jpa、kafka,Hakira 等等。SpringBoot 應用中這些第三方庫幾乎可以零配置地開箱即用,大部分的 SpringBoot 應用都只需要非常少量的配置代碼,開發者能夠更加專注於業務邏輯。
為什么
為什么會產生 SpringBoot 呢?
剛才說 SpringBoot 簡化了基於 Spring 開發,這只是最直觀的一方面,事實上 SpringBoot 的誕生有它所處的大時代背景這個原因在里面的,那就是微服務,這也是談 SpringBoot 必談微服務的原因。
2014年一個叫 Martin Fowler (同時也是經典著作《重構:改善既有代碼的設計》一書的作者)發表了一篇關於微服務的博客,比較形象生動地介紹了什么是微服務,然后微服務才慢慢被人所熟知。他說微服務其實是一種架構風格,我們在開發一個應用的時候這個應用應該是由一組小型服務組成,每個小型服務都運行在自己的進程內;小服務之間通過HTTP的方式進行互聯互通。和微服務相對應的就是我們之前的,單體應用,就是大名鼎鼎的 all in one 的風格。這種風格把所有的東西都寫在一個應用里面,比如我們熟悉的OA,CRM,ERP系統,所有的頁面,所有的代碼都放在一起,打成打成一個war包,然后把war包放在Tomcat容器中運行。
這種傳統web開發的架構模式當然也有它的優勢,比如它測試部署比較簡單,因為不涉及到多個服務的互聯互調,只需要把一個包上傳到服務器就行了,可以說是一人吃飽全家不餓。同樣也不會給運維帶來麻煩,方便水平擴展,只需要又把相同的應用復制多份放在不同的服務器中就達到了擴展的目的。
單體應用的的缺點也顯而易見,容易牽一發而動全身,比如要更改一個小小的功能,就可能需要重新部署整個應用。當然,更大的挑戰就是日益增長的用戶需求。
怎么樣
介紹了一大堆,那 SpringBoot 的開箱即用是怎么體現的呢。
SpringBoot 官方推薦的構建應用的方式是使用 Spring Initializr,直接在網頁上選擇好構建工具、語言、SpringBoot 版本,填好自己的項目名和初始依賴,然后點Generate 按鈕,就能下載一個構建好的工程的zip包,只需要把這個包解壓之后導入IDE就可以了。
這已經是一個包含依賴的、完整的、可獨立運行的springboot應用了!你所需要做的就是往里面填充自己的業務代碼!
當然,如果能直接使用IDE來進行上述操作可以讓這個過程變得更順滑。如果你使用的是 IDEA 商業版的話,新建工程的時候直接有 Spring 的選項;如果是IDEA社區版的話,可以安裝 Spring Assistant
這個插件可以實現同樣的功能。它們的原理是幫你把連接 Spring Initializr 並下載解壓這個過程自動化了,所以只需要保持網絡暢通就行了。
SpringBoot | Spring + Spring MVC |
---|---|
Spring Initializr | 1. 安裝Tomcat 2. 引入spring必要依賴 spring-webmvc spring-context spring-beans spring-aspects ... 3. 引入必要的第三方依賴,jdbc,test,log這些依賴依然要注意版本兼容問題 4. 新建webapp/WEB-INFO/web.xml 5. applicationContext.xml 6. Springmvc.xml ... |
那如果要用原生的springMVC來實現這個事情就復雜了,可以看看右邊我大概羅列的這些步驟,當時學的時候讓我我非常頭疼。要單獨安裝Tomcat,安裝的過程中要注意版本和當前的spring版本是否兼容,手動引入spring各個模塊的依賴。pom.xml就不說了,maven工程都要用到,然后還有web.xml-用來配置servlet、攔截規則、字符編碼器等等,applicationContext.xml,springmvc.xml 等一大堆xml文件……
這個過程對初學者非常不友好,記憶這些步驟和配置文件能讓人崩潰,xml這種表達方式又不是很直觀。這些東西稱為腳手架,在小公司里面會搭建這些東西就可以算半個師傅了,小弟們就可以在搭好的架子里面寫業務代碼了。
再聊回微服務,試想一下,如果我們要跟上時代的步伐,使用微服務去開發軟件,每個功能模塊都部署成一個單獨的服務,這個時候我們再使用純粹的 Spring 去開發,每開發一個服務都需要重復的搭建項目骨架,然后編寫各種配置文件,幾十幾百個服務加起來,這部分工作量是很大的,這還不算業務代碼的開發時間。這種時候就是 SpringBoot 發揮它開箱即用的特質的時候了。然后多個微服務之間再通過 Spring 全家桶里面的 SpringCloud 進行管理,比如服務注冊、服務發現等等。所以我們現在說 SpringBoot 是 Java 企業級開發的一站式解決方案。
總結
軟件工程是一個不斷抽象,不斷把復雜的東西簡化的這樣一套理論和工具,不是是說使用起來越復雜就可以彰顯我的高端和牛逼,有時候反而是做多錯多。所以SpringBoot告訴我們這些工作都沒必要,框架來做就行了,你們可以專注於代碼邏輯。
SpringBoot 具有如下優點:
-
快速創建獨立運行的Spring項目以及與主流框架集成、
-
使用嵌入式的Servlet容器,應用無需打成WAR包
-
Starters自動依賴與版本控制
-
大量的自動配置,簡化開發,也可修改默認值
-
無需配置XML,無代碼生成,開箱即用
-
准生產環境的運行時應用監控
-
與雲計算的天然集成
這些優點這篇文章中有的涉及到了,有的還沒介紹。我會在之后的文章中陸續把這些話題展開。那么現在,你要做的就是,趕緊把 SpringBoot 用起來吧!
文章作者: 木白
文章鏈接: https://pengcheng.site/2019/10/28/springboot-jian-jie/
版權聲明: 本博客所有文章除特別聲明外,均采用 CC BY 4.0 許可協議。轉載請注明來源 木白 !