SpringBoot概念
Spring優缺點分析
Spring優點
Spring是Java企業版(Java Enterprise Edition,JEE,也稱J2EE)的輕量級代替品,無需開發重量級的Enterprise JavaBean(EJB)。Spring為企業級Java開發提供了一種相對簡單的方法,通過依賴注入和麵向切面程式設計,用簡單的Java物件(Plain Old Java Object,POJO)實現了EJB的功能。
Spring缺點
雖然Spring的元件程式碼是輕量級的,但它的配置卻是重量級的。一開始,Spring用XML配置,而且是很多XML配 置。Spring 2.5引入了基於註解的元件掃描,這消除了大量針對應用程式自身元件的顯式XML配置。Spring 3.0引入了基於Java的配置,這是一種型別安全的可重構配置方式,可以代替XML。
所有這些配置都代表了開發時的損耗,因為在思考Spring特性配置和解決業務問題之間需要進行思維切換,所以編寫配置擠佔了編寫應用程式邏輯的時間。和所有框架一樣,Spring實用,但與此同時它要求的回報也不少。
除此之外,專案的依賴管理也是一件耗時耗力的事情。在環境搭建時,需要分析要匯入哪些庫的座標, 而且還需要分析匯入與之有依賴關係的其他庫的座標,一旦選錯了依賴的版本,隨之而來的不相容問題就會嚴重阻礙專案的開發進度。
SpringBoot解決Spring上述缺點
SpringBoot對上述Spring的缺點進行的改善和優化,基於約定優於配置的思想,可以讓開發人員不必在配置與邏輯業務之間進行思維的切換,全身心的投入到邏輯業務的程式碼編寫中,從而大大提高了開發的效率,一定程度上縮短了專案週期。
起步依賴
起步依賴本質上是一個Maven專案物件模型(Project Object Model,POM),定義了對其他庫的傳遞依賴,這些東西加在一起即支援某項功能。
簡單的說,起步依賴就是將具備某種功能的座標打包到一起,並提供一些預設的功能。
自動配置
SpringBoot的自動配置,指的是SpringBoot會自動將一些配置類的bean註冊進IOC容器,我們可以需要的地方使用@autowired或者@resource等註解來使用它。
“自動”的表現形式就是我們只需要引我們想用功能的包,相關的配置我們完全不用管,SpringBoot會自動注入這些配置bean,我們直接使用這些bean即可。
SpringBoot的優點
- 簡單、快速、方便地搭建專案;
- 對主流開發框架的無配置整合;
- 極大提高了開發、部署效率。
SpringBoot簡單案例實現
案例需求:請求Controller中的介面,返回“你好 SpringBoot”到頁面。
(1)使用Spring Initializr方式構建SpringBoot專案
Spring Initializr是一個Web應用,它提供了基本的專案結構,能夠幫助我們快速構建一個基礎的SpringBoot專案。建立步驟如下所示:
開啟IDEA->File->New->Project:
Project SDK用於設定建立專案使用的SDK版本,這裡我選擇JDK1.8版本;在“choose starter service url(選擇初始化伺服器地址)”下使用預設的初始化伺服器地址“https://start.spring.io”進行SpringBoot專案建立(注意使用快速方式建立SpringBoot專案時,主機必須聯網)。
點選下一步:
點選Finish,即可完成SpringBoot專案的建立工作:
建立好的SpringBoot專案結構如下圖所示:
使用Spring Initializr方式構建的SpringBoot專案會預設生成專案啟動類、存放前端靜態資原始檔夾和模板頁面的資料夾、編寫專案配置的全域性配置資料夾以及進行單元測試的測試類。
(2)建立一個用於Web訪問的Controller
在com.hardy.springboot_demo下建立一個名為controller的包,在controller包下建立一個HelloController類,並編寫一個返回“你好 SpringBoot”的介面,程式碼如下:
@RestController // 該註解為組合註解,相當於Spring中 @Controller+@ResponseBody註解 public class HelloController { @RequestMapping(name="/demo", produces="application/json; charset=utf-8") public String demo(){ return "你好 SpringBoot"; } }
其中 produces = "application/json; charset=utf-8" 是為了解決中文亂碼的問題。
(3)執行專案
點選執行按鈕:
訪問 http://localhost:8080/ 檢視結果:
單元測試與熱部署
(1)單元測試
開發中,每當完成一個功能介面或業務方法的編寫後,通常會藉助單元測試驗證功能是否正常。SpringBoot對專案的單元測試提供了很好的支援,在使用時,需要提前在專案的pom.xml檔案引入spring-boot-starter-test測試依賴啟動器,以便通過相關注解實現單元測試。
操作步驟如下:
1、引入spring-boot-starter-test測試依賴啟動器
在專案的pom.xml檔案引入spring-boot-starter-test測試依賴啟動器,示例程式碼如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
注意:使用Spring Initializr方式搭建的SpringBoot專案會自動加入spring-boot-starter-test測試依賴器,無需再手動新增。
2、編寫單元測試類和測試方法
使用Spring Initializr方式搭建的SpringBoot專案,會自動src.test.java測試目錄下建立與專案主程式啟動類對應的測試類並自帶一個contextLoads測試方法,下面來完善一下測試類的程式碼:
@SpringBootTest // 標記為SpringBoot單元測試類,並載入專案的ApplicationContext上下文環境 class SpringbootDemoApplicationTests { @Autowired private HelloController helloController; /** * 自動建立的單元測試方法示例 */ @Test void contextLoads() { String demo = helloController.demo(); System.out.println(demo); } }
執行測試方法,在控制檯檢視單元測試結果:
(2)熱部署
在開發過程中,通常需要對一段業務程式碼進行重複修改測試,在修改之後往往需要重啟服務,有些服務需要載入很久才能啟動成功,這種不必要的重複操作不利於提升開發效率。為此,SpringBoot框架專門提供了進行熱部署的依賴啟動器,用於進行專案熱部署,而無需手動重啟專案。
操作步驟:
1、引入spring-boot-devtools熱部署依賴啟動器
<!-- 引入熱部署依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency>
引入spring-boot-devtools熱部署依賴啟動器後,還需要針對IDEA開發工具進行熱部署相關的功能設定。
2、IDEA工具熱部署設定
選擇IDEA工具介面 File->Settings 選項,開啟 Compiler 皮膚設定頁面:
選擇 Build 下的 Compiler 選項,在右側勾選 Build project automatically 選項將專案設定為自動編譯,單擊 OK 按鈕儲存設定。
在專案的任意頁面中使用組合快捷鍵 Ctrl+Shift+Alt+/ 開啟 Maintenance 選項框,選中並開啟 Registry 頁面,具體如下圖所示:
在列表中找到 compiler.automake.allow.when.app.running,將該選項的 Value 勾選,用於指定 IDEA 工具在程式執行過程中自動編譯,最後單擊 Close 按鈕完成設定。
3、使熱部署生效
假如用 mvn spring-boot:run 方式啟動應用,修改完java檔案就會立即生效。
假如用 debug 方式啟動應用,則需要手動重新編譯整個專案,或者編譯被修改的檔案。比如點選 IDEA 選單 Build > Build XXX / Recompile XXX
4、熱部署效果測試
以 debug 模式啟動專案,訪問 http://localhost:8080/ 檢視結果:
頁面一開始輸出的內容為“你好SpringBoot”:
為了測試配置的熱部署是否有效,我們在不關閉專案的情況下將頁面返回內容修改為“Hello SpringBoot”並儲存,檢視控制檯資訊會發現專案能夠自動構建和編譯,說明專案熱部署生效,重新整理頁面:
可以看到,瀏覽器輸出了“Hello SpringBoot”,說明專案熱部署成功了。
總結
在本篇文章中,我們介紹了SpringBoot的基本概念,實現了一個簡單的SpringBoot專案demo,並且介紹了其單元測試與熱部署配置。
關於SpringBoot的知識還有很多,比如它的配置檔案、原理及原始碼解析、資料訪問、檢視技術及快取管理,在後面的文章中,我們會一一進行講解。