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
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配置詳解