1. 程式人生 > >SpringBoot進擊 | 一淺出:Spring Boot簡單快速上手書

SpringBoot進擊 | 一淺出:Spring Boot簡單快速上手書


為了後繼的 Spring Cloud 學習和進階,我們需要先行了解 Spring Boot


1.前言

1.1 認識 Spring Boot

Spring Boot 是由Pivotal團隊提供的全新框架。她:

  • 從2002年開始,Spring一直在飛速的發展,而Java EE使用Spring卻逐漸變得笨重起來,大量的XML檔案存在於專案之中,繁瑣的配置,整合第三方框架的配置問題,導致了開發和部署效率的降低。
  • Spring Boot是伴隨著 Spring 4.0 誕生的,從字面理解,Boot是引導的意思,因此 Spring Boot旨在幫助開發者快速搭建Spring框架。Spring Boot繼承了原有Spring框架的優秀基因,使Spring在使用中更加方便快捷。
  • Spring Boot並不是用來替代Spring的解決方案,而是和Spring框架緊密結合用於提升Spring開發者體驗的工具。同時它集成了大量常用的第三方庫配置,簡化Spring應用搭建和開發。

1.2 瞭解 Spring Boot

做為一個優秀的輕量級框架,她的特點突出:

  • 輕量快捷:門檻低,易上手,致力於簡潔,讓開發者寫更少的配置,更快的搭建和啟動專案
  • 自動化配置:Spring Boot為每一個Starter都提供了自動化的Java配置類,用來替代我們傳統Spring應用在XML中繁瑣且並不太變化的Bean配置
  • 嵌入式容器:內嵌Tomcat等Web容器
  • 簡化依賴管理:對功能性模組進行了劃分和封裝,使用簡單,避免傳統Spring應用產生的大量依賴關係而引發的JAR衝突;Java Config的方式,對Spring進行配置,避免了XML配置以及複雜的依賴管理

2.進擊

既然Spring Boot 那麼好,那我們就馬上來一發吧~

2.1 準備工作

我們需要:

  • JDK 1.8或以上
  • Maven 3.0或以上
  • IntelliJ IDEA

2.2 構建工程

開啟IDEA,選單欄 File >> New >> Project >> Spring Initializr >> [Next]
2.2.1

Project SDK:1.8;choose Initializr Service URL:Default >> [Next]
2.2.2 填寫Group、Artifact等專案資訊 >> [Next]
2.2.3 Dependencies:專案依賴選擇,選擇Web並鉤上; Spring Boot 版本選擇,這裡我使用的是 2.0.4 >> [Next]
2.2.4 專案名稱、路徑設定 >> [Finish]
這裡寫圖片描述
如此,一個畫風乾淨的Spring Boot Demo就映入眼簾。

2.3 目錄結構

└─wei-springboot
    │  mvnw        // 全名是maven wrapper,它的原理是在maven-wrapper.properties檔案中記錄你要使用的maven版本                 
    │  mvnw.cmd    // 當用戶執行mvnw clean命令時,發現當前使用者的maven版本和期望的版本不一致,那麼就下載期望的版本,然後用期望的版本來執行mvn命令,比如mvn clean
    │  pom.xml                             // maven 依賴配置檔案
    │  wei-springboot.iml                  // idea的配置檔案
    │
    ├─.mvn
    │  └─wrapper
    │          maven-wrapper.jar           // 當前使用的maven jar包
    │          maven-wrapper.properties    // 記錄你要使用的Maven版本
    │
    └─src                                  // java原始碼目錄
        ├─main
        │  ├─java
        │  │  └─com
        │  │      └─wei
        │  │              WeiSpringbootApplication.java    // 啟動類,程式入口
        │  │
        │  └─resources                          // 資原始檔
        │      │  application.properties        // 配置檔案
        │      │
        │      ├─static                         // 靜態資源
        │      └─templates                      // 模板資源
        └─test
            └─java
                └─com
                    └─wei
                            WeiSpringbootApplicationTests.java    // 測試類

2.4 檔案解讀

2.4.1 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.wei</groupId>
	<artifactId>wei-springboot</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>wei-springboot</name>
	<description>Demo project for Spring Boot</description>

	<!--Spring Boot父級依賴,會自動為我們引入相關Maven預設依賴,使用它之後,常用的包依賴可以省去version標籤-->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<!--Spring Boot Maven外掛-->
			<!--1.把專案打包成一個可執行的JAR,包括把應用程式的所有依賴打入JAR檔案內,併為JAR新增一個描述檔案,其中的內容能讓你用java -jar來執行應用程式-->
			<!--2.搜尋public static void main()方法來標記為可執行類-->
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

檢視pom依賴,我們可以發現 spring-boot-starter-web 不僅包含 spring-boot-starter,還自動開啟了web功能。所以,Spring Boot 提供了很多“開箱即用”的依賴模組,都是以spring-boot-starter-xxx作為命名。

具體引入了哪些預設依賴,可以檢視電腦本地路徑:
C:\Users\使用者.m2\repository\org\springframework\boot\spring-boot-dependencies\2.0.4.RELEASE\spring-boot-dependencies-2.0.4.RELEASE.pom
這裡寫圖片描述

2.4.2 Application啟動類
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 註解@SpringBootApplication是Sprnig Boot專案的核心註解,主要目的是開啟自動配置
 */
@SpringBootApplication
public class WeiSpringbootApplication {

    /**
     * 標準的Java應用的main的方法,主要作用是作為專案啟動的入口
     * @param args
     */
    public static void main(String[] args) {
        SpringApplication.run(WeiSpringbootApplication.class, args);
    }
}

@SpringBootApplication:申明讓Spring自動給程式進行必要的配置,等同於同時使用@Configuration,@EnableAutoConfiguration 和 @ComponentScan 三個配置。

  • @Configuration:標識這個類可以使用Spring IOC容器作為bean定義的來源,相當於XML中的beans標籤
  • @EnableAutoConfiguration:讓 Spring Boot 根據應用所宣告的依賴來對 Spring 框架進行自動配置,由於 spring-boot-starter-web 添加了Tomcat和Spring MVC,所以auto-configuration將假定你正在開發一個web應用並相應地對Spring進行設定
  • @ComponentScan:表示將該類自動發現(掃描)並註冊為Bean,可以自動收集所有的Spring元件(@Component , @Service , @Repository , @Controller 等),包括@Configuration類

至此,我們只是建立了一個名叫xxxx的 Spring Boot 工程。
但是,一個簡單的基礎的 Spring Boot 工程確實已經被我們建立完成了。

3.論證

3.1 跑起來吧

新增一個Controller類,通過傳送http請求來驗證一下我們的成果~

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
/**
 * 註解@RestController,相當於@Controller和@ResponseBody兩個註解的結合,使用這個註解的類裡面的方法都以json格式輸出
 */
@RestController
public class DemoController {
 
    @RequestMapping(value = "/demo/hi")
    public String getDemoHi() {
        String result = "Hello, Spring Boot";
        System.out.println(result);
        return result;
    }
 
}

寫好後,我們啟動主程式WeiSpringbootApplication。

從下圖可以看出Web容器是Tomcat。因為沒有對專案做任何配置,所以使用的是預設埠8080。
這裡寫圖片描述
開啟瀏覽器,輸入URL地址 http://localhost:8080/demo/hi

如你所見,我們可以看到瀏覽器顯示:

Hello, Spring Boot

如你所想,我們沒有做任何的 web.xml 配置,也沒有做任何的 spring mvc 的配置(Spring Boot幫你做了),也沒有配置Tomcat(Spring Boot內嵌了Tomcat),完全體現不出我們對傳統Spring的深深的造詣(邪惡之笑),有木有很簡單~

3.2 單元測試

import com.wei.controller.demo.DemoController;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoControllerTests {
 
    private MockMvc mockMvc;
 
    @Before
    public void setUp() {
        mockMvc = MockMvcBuilders.standaloneSetup(new DemoController()).build();
    }
 
    @Test
    public void testDemoHi() throws Exception {
        mockMvc.perform(MockMvcRequestBuilders.get("/demo/hi").accept(MediaType.APPLICATION_JSON)).
                andExpect(MockMvcResultMatchers.status().isOk()).
                andDo(MockMvcResultHandlers.print()).andReturn();
    }
}

執行此測試用例前,需要先執行工程的啟動類噢~ 相信你也會看到測試通過的報告

4.總結

官方網站:https://spring.io/projects/spring-boot

Spring Boot 穩定版可以參考1.5.15,2.0.4
Spring Boot 1.x 生命週期已結束,這意味著他們將在2019年8月1日前的 12 個月內逐漸停止維護。
Spring Boot 2.0 及更高版本需要 Java 8+

配置變得簡單了,編碼得的簡單了,部署變的簡單了。
她啟了各種自動裝配,不用寫各種配置檔案,引入相關的依賴就能迅速搭建起一個WEB工程。
就好像,當你用了IDEA,就再也不想回到Eclipse時代一樣美妙。


但是在此,她的特性還沒有完全顯現,還需要我們進一步去發現,去實踐,去驗證,去總結

下一節,請繼續關注:SpringBoot進擊 | 二淺出:Spring Boot配置詳解