Spring Boot 是 Spring 開源組織下的子項目,是 Spring 組件一站式解決方案,主要是簡化了使用 Spring 的難度,簡省了繁重的配置,提供了各種啟動器,開發者能快速上手。
解決:
-
"Spring全家桶" 時代。
-
SpringBoot --> J2EE一站式解決方案。
-
SpringCloud --> 分布式整體解決方案。
特性:
-
快速創建獨立運行的 Spring 應用程序。
-
直接嵌入式的 Tomcat、Jetty 或 Undertow,無需部署WAR包文件。
-
提供各種 “starter(啟動器)” 依賴關系,以簡化構建配置。
-
大量的自動配置,簡化開發,也支持修改默認值。
-
提供可用於生產環境的特性,例如度量指標、健康檢查和外部化配置。
-
完全不需要代碼生成,也不需要XML配置。
二、准備工作
學習前必須掌握以下內容:
-
Spring 框架的使用經驗
-
熟練使用 Maven/Gradle 進行項目構建
-
熟練使用 IDEA 和 Eclipse
環境約束:
-
Jdk1.8
-
Gradle 4.10
-
IntelliJ IDEA 2020
-
Spring Boot 2.1.9.RELEASE
系統要求:雖然你可以在Java 6或7上使用 Spring Boot,但是建議用Java 8。
三、使用Spring Initializr初始化SpringBoot項目
萬事開頭難,你需要設置一個目錄結構存放各種項目內容,創建構建文件,並在其中加入各種依賴。如果你傾向於傳統 Java 項目結構,可以去看看 Spring Initializr。 Spring Initializr 從本質上來說就是一個Web應用程序,它能為你生成 Spring Boot 項目結構。雖然不能生成應用程序代碼,但它能為你提供一個基本的項目結構,以及一個用於構建代碼的Maven或Gradle構建說明文件。你只需要寫應用程序的代碼就好了。
最常用的 Spring Initializr 有以下兩種用法:
-
通過Web界面使用。
-
通過IntelliJ IDEA使用。
1.使用Spring Initializr的Web界面
要使用 Spring Initializr,最直接的辦法就是用瀏覽器打開 https://start.spring.io 或 https://start.aliyun.com,你應該能看到類似下圖的表單。
Alibaba 構建項目官方版:

Spring 構建項目官方版:

表單的頭三個問題是,你想用 Maven 還是 Gradle 來構建項目,選擇什么樣的語言開發,以及使用 Spring Boot 的哪個版本。程序默認生成 Maven 項目,我使用的是 Gradle 方式構建,並使用 Spring Boot 的最新版本,但你也可以自由選擇其他選項。
表單左側 Project Metadata 要你指定項目的一些基本信息。最起碼你要提供項目的 Group 和 Artifact,分別是項目組(公司域名)Name 與 Artifact 是項目名稱兩者意思相同,Description 是項目描述信息可選,Package name 是包名,這些信息是用來生成 Maven 的 pom.xml 文件或者 Gradle 的 build.gradle 文件的。
填完表單,選好依賴,點擊 “Generate Ctrl” 按鈕,Spring Initializr 就會為你生成一個項目。瀏覽器將會以ZIP文件的形式(文件名取決於 Artifact 字段的內容)把這個項目下載下來。根據你的選擇,ZIP文件的內容也會略有不同。不管怎樣,ZIP文件都會包含一個極其基礎的項目,讓你能着手使用 Spring Boot 開發應用程序。
舉例來說,假設你在 Spring Initializr 里指定了如下信息。
-
Artifact:springboot-learning
-
包名:org.wesson.springboot.study
-
類型:Gradle項目
-
依賴:Spring Web
點擊“Generate Ctrl”,就能獲得一個名為springboot-learning.zip的ZIP文件。解壓后的項目結構如下圖:

如你所見,項目里基本沒有代碼,除了幾個空目錄外,還包含了如下幾樣東西。
-
Application.java:一個帶有main()方法的類,用於引導啟動應用程序。
-
ApplicationTests.java:一個空的JUnit測試類,它加載了一個使用Spring Boot自動配置功能的Spring應用程序上下文。
-
build.gradle:Gradle 構建說明文件。如果選擇 Maven 項目,這就會換成 pom.xml。
-
application.properties:一個空的properties文件,你可以根據需要添加配置屬性。
在 Spring Boot 應用程序中,就連空目錄都有自己的意義。static 目錄放置的是 Web 應用程序的靜態內容(JavaScript、樣式表、圖片,等等)。還有用於呈現模型數據的模板會放在 templates 目錄里。
2.在IntelliJ IDEA里創建SpringBoot項目
要在 IntelliJ IDEA 里創建新的 Spring Boot 應用程序,在 File 菜單里選擇 New > Project。你會看到幾屏內容,問的問題和 Initializr 的 Web 應用程序類似。
首先顯示的是 Spring Boot 初始化向導的第一屏內容中,在左側項目選擇里選中 Spring Initializr,隨后會提示你選擇一個 Project SDK(選擇 Java Jdk 版本),同時選擇 Initializr Web 服務的位置,選擇 Default 默認即可,直接點擊 Next 按鈕:

接着顯示的是 Spring Boot 初始化向導的第二屏內容,要求你提供項目的一些基本信息,比如項目名稱、Group 和 Artifact、Java 版本、Package 包名,以及你是想用 Maven 還是 Gradle 來構建項目。描述好項目信息之后,點擊 Next 按鈕:

最后一屏問你項目叫什么名字,還有要在哪里創建項目。一切准備就緒之后,點擊 Finish 按鈕,就能在 IDEA 里得到一個空的 Spring Boot 項目了:

四、永遠的Hello World
1.新建Module
上面已經創建過父級項目工程了,了解過 Spring Boot 工程目錄后,父級項目中的 src 目錄就可以刪除了:

在以后的學習中,我們使用 IntelliJ IDEA New 一個 Module 子項目名叫 springboot-hello 進行編寫代碼:

2.build.gradle項目依賴
引入spring-boot-starter-web依賴:使用Spring MVC構建Web(包括RESTful)應用程序的入門程序。使用Tomcat作為默認的嵌入式容器
plugins { id 'org.springframework.boot' version '2.1.9.RELEASE' id 'io.spring.dependency-management' version '1.0.9.RELEASE' id 'java' } group = 'org.wesson.springboot.hello' version = '1.0.0' sourceCompatibility = '1.8' repositories { maven { // 指定阿里雲遠程倉庫的位置,能夠加快導入第三方jar包速度 url = "http://maven.aliyun.com/nexus/content/groups/public/" } mavenCentral() } dependencies { compile group: 'org.springframework.boot', name: 'spring-boot-starter-web' testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test' }
3.啟動類SpringbootHelloApplication.java
package org.wesson.springboot.hello; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan */ @SpringBootApplication public class SpringbootHelloApplication { public static void main(String[] args) { // 負責啟動Spring引導應用程序 SpringApplication.run(SpringbootHelloApplication.class, args); } }
我們一起來復習一下之前 SSM 框架的三個注解吧,看看大家還能想起來多少:
-
@Configuration:用於定義配置類,可替換xml配置文件,被注解的類內部包含有一個或多個被@Bean注解的方法。
-
@EnableAutoConfiguration:開啟Spring Boot自動配置的機制。
-
@ComponentScan:開啟@Component對應用程序指定包下注解(@Repository、@Service、@Controller)進行Spring組件掃描。
package org.wesson.springboot.hello.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @RestController = @Controller + @ResponseBody */ @RestController @RequestMapping("/demo") public class HelloController { /** * @GetMapping = @RequestMapping(method = RequestMethod.GET),method:指定請求的方法類型(GET,POST,PUT,DELETE)等。 */ @GetMapping("/hello") public String hello() { return "Hello World!"; } }
5.測試
運行一個名叫 SpringbootHelloApplication.java 的啟動類,可以一起來看以下內嵌式的 Tomcat 運行效果,控制台默認顯示8080端口號:

瀏覽器訪問 http://localhost:8080/demo/hello 請求,輸出結果如下:

五、什么是SpringBoot啟動器
啟動器(Starters)是一套非常方便的依賴管理工具,它能夠讓你在自己的應用程序中包含它們。你可以獲得一個一站式的 https://mvnrepository.com Maven 倉庫網址,里面有你需要的所有 Spring 和相關技術。只要是創建 Spring Boot 項目,你所需要的第三方 Jar 包都能夠從該官網上找到,比如下面搜索一個 spring web 依賴:

由於現在學習的是 Spring Boot,就選擇 Spring Boot Web Starter 啟動器,點進去之后你就能看到發布的所有版本號了:

我使用的 Spring Boot 版本號是 2.1.9.RELEASE,個人覺得還是挺穩定的。黃色圈下面的菜單你就能夠看到 Maven 與 Gradle 的依賴資源了:

所有啟動器都遵循類似的命名方式:spring-boot-starter-*,其中*是特定類型的應用程序(也可以說是你所需要引入的某某技術)。這個命名結構是為了在你需要查找啟動器時提供幫助。更多詳細的 Spring Boot 常用啟動器請參考官方文檔:Starters
Java 學習到這個階段,自己還不會創建項目和查找依賴的話就實在有點說不過去了!!!

