天天看點

使用Spring Initializr建構Spring Boot詳解4. 項目結構分析

兄弟們,學習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網址,按如下圖生成一個項目:

使用Spring Initializr建構Spring Boot詳解4. 項目結構分析

3. 導入項目

maven項目的結構都是确定的,然後maven會根據pom.xml配置自動導入相應的jar包,并自動幫我們建構項目,我們隻需要運作項目即可,就是這麼舒心。

在eclipse中,直接點選File-Import-Existing Maven Projects,選中剛剛下載下傳後解壓的檔案夾導入即可。

使用Spring Initializr建構Spring Boot詳解4. 項目結構分析

4. 項目結構分析

使用Spring Initializr建構Spring Boot詳解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 Initializr建構Spring Boot詳解4. 項目結構分析

就是這麼簡單啊,對比下要配置一個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,我們來看看這個注解到底是啥:

使用Spring Initializr建構Spring Boot詳解4. 項目結構分析

哈哈,終于抓到重點了,看看這個注解,包含了以下注解

@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的結構,就能上手了,就這麼簡答。

繼續閱讀