SpringBoot基礎學習(一) SpringBoot概念、簡單案例實現、單元測試及熱部署講解

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(選擇初始化服務器地址)」下使用默認的初始化服務器地址「//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)運行項目

點擊運行按鈕:

訪問 //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 模式啟動項目,訪問 //localhost:8080/ 查看結果:

頁面一開始輸出的內容為「你好SpringBoot」:

為了測試配置的熱部署是否有效,我們在不關閉項目的情況下將頁面返回內容修改為「Hello SpringBoot」並保存,查看控制台信息會發現項目能夠自動構建和編譯,說明項目熱部署生效,刷新頁面:

可以看到,瀏覽器輸出了「Hello SpringBoot」,說明項目熱部署成功了。

總結

在本篇文章中,我們介紹了SpringBoot的基本概念,實現了一個簡單的SpringBoot項目demo,並且介紹了其單元測試與熱部署配置。

關於SpringBoot的知識還有很多,比如它的配置文件、原理及源碼解析、數據訪問、視圖技術及緩存管理,在後面的文章中,我們會一一進行講解。