兄弟們,學習SpringBoot不能光說不練,下面是第一個案例,讓我們了解下SpringBoot是怎麼運作起來的吧。
1. 建構項目
SpringBoot項目可以基于maven建構的,實際上maven是一個Java項目的外挂,當使用maven之後,項目的建構、編譯、運作都交給這個外挂管理了,但是也要符合maven對項目結構等方面規範要求。
maven就像一個應用生産的流水線,按規矩來,可以快速批量生産标準應用。
是以基于maven建構的SpringBoot應用,那也是标準件,是以Spring官方也提供了标準件的生産工具,通過該工具可以直接生成一個SpringBoot應用,我們直接導入開發工具(eclipse或idea或其他工具)使用即可,省的一步步配置麻煩,反正都是按maven規範定好的項目結構。
OK,這個可以直接生成SpringBoot的工具就是Spring Initializr啦。
2. 使用Spring Initializr建構項目
打開網址:Spring Initialize網址,按如下圖生成一個項目:

3. 導入項目
maven項目的結構都是确定的,然後maven會根據pom.xml配置自動導入相應的jar包,并自動幫我們建構項目,我們隻需要運作項目即可,就是這麼舒心。
在eclipse中,直接點選File-Import-Existing Maven Projects,選中剛剛下載下傳後解壓的檔案夾導入即可。
4. 項目結構分析
我們一一具體分析下項目結構中每一部分的作用
spring-boot-hello :項目名稱
--src/man/java:java源代碼
--src/main/resources:配置檔案、圖檔、網頁等靜态資源
----application/properties:項目配置檔案,配置項目通路路徑、啟動端口等資訊
--src/test/java:測試代碼
--target:項目編譯打包後存儲位置
--pom.xml:maven配置檔案,用于配置jar包依賴及項目建構所需資訊
5. 項目如何運作的詳解
5.1 pom.xml分析
既然是maven管理的,就得看maven是怎麼把這個項目跑起來的,首先maven先看配置檔案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
https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.forwhatsogood</groupId>
<artifactId>spring-boot-hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-boot-hello</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
首先看到parent标簽内容如下,這說明該項目是一個2.2.4.RELEASE版本的SpringBoot項目。
然後看下項目标志資訊部分如下,說明了該maven項目所屬的機構groupId,項目名稱name,還有maven标志名artifactId,也就是說規定了該項目的身份資訊,以便于被其他項目定位調用使用什麼的。
然後看下依賴定義如下,此處定義了需要引入的jar包功能,我們看到springboot中jar引入大多通過spring-boot-starter-xxx這種方式,實際上spring-boot-starter-xxx整合了很多包,例如spring-boot-starter-test整合了許多單元測試相關的内容,我們不需要關心,隻需要根據需要引入spring-boot-starter-xxx即可。
然後看下插件部分,spring-boot-maven-plugin非常厲害,能将項目打包為jar或者war應用,而且可以執行SpringBoot應用。
5.2 SpringBootHelloApplication.java分析
好的,通過上面的配置檔案,maven了解了建構本項目需要的基本資訊,是以當我們運作SpringBootHelloApplication類時,maven實際上已經将需要的jar引入,并按照配置為了我們做好需要的運作環境了,我們需要做的隻是進入SpringBootHelloApplication類,然後點選運作,整個項目就啟動了,簡直是不能再簡單了!
就是這麼簡單啊,對比下要配置一個Spring應用,我第一次用SpringBoot的時候,感覺簡直爽快到飛起了,下面我們看看代碼到底是咋啟動的:
@SpringBootApplication
public class SpringBootHelloApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootHelloApplication.class, args);
}
}
1
2
3
4
5
6
說實話,看到這段代碼,太平庸了,就是一個main方法,然後SpringApplication.run表示啟動程式,啟動改程式需要的參數是SpringBootHelloApplication.class和args,很顯然,args是啟動參數,我們啥也沒設定,是以真正的内涵都在SpringBootHelloApplication.class這個類裡面。
然後我們自信看下這個類,就是光秃秃的一個普通類嘛,搞不懂為啥這麼牛能啟動大名鼎鼎的SpringBoot,等等,好像這個類有一個注解@SpringBootApplication,這個注解是唯一跟我們之前普通類不同的地方,看來所有的竅門都在這個注解上。
5.3 神奇的@SpringBootApplication注解
剛剛我們分析了,SpringBoot啟動時,有用的參數也就SpringBootHelloApplication.class,也是就是SpringBootHelloApplication類資訊。
該類平平無奇,就是有個注解SpringBootHelloApplication,我們來看看這個注解到底是啥:
哈哈,終于抓到重點了,看看這個注解,包含了以下注解
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponetScan
這幾個很眼熟啊,看到這幾個注解,我就基本明白咋回事了。
首先@SpringBootConfiguration,看到Configuration這是個Spring配置類,也就是說本類會被Spring容器管理,并加載裡面的配置資訊,比如bean定義等,此處雖然啥也沒定義,但是現在已經有Spring容器啦。
其次,@EnableAutoConfiguration,這個是啟動自動配置的意思,啥是自動配置,就是把所有配置類都加載到容器,比如項目中有多個@Configuraion,統統納入Spring管理,這樣項目中所有的配置、bean定義都可以在容器中管理啦。
最後,@ComponetScan,制定了掃描包的範圍,當然配置類很多,也不能不分你我統統都用了,可以通過該注解指定掃描的包的範圍。注意預設情況下,就是不寫參數的情況下,SpringBoot會掃描@SpringBootApplication注解的類所在的包及其子包。
6. 總結
哈哈,到這就很清晰了,首先maven通過pom.xml的配置,為項目的啟動奠定了編譯基礎。
然後當我們啟動時,通過@SpringBootApplication注解,啟動了Spring容器,并将符合掃描範圍的配置類及bean統統納入了容器管理。
看明白了,就是通過注解整合和自動配置,将之前啰裡啰嗦的各類配置自動化了,完事。
是以隻要對Spring技術很熟悉,隻要稍微了解下SpringBoot的結構,就能上手了,就這麼簡答。