傳統的Spring框架實現一個Web服務,需要導入各種依賴JAR包,然后編寫對應的XML配置文件等,相較而言,Spring Boot顯得更加方便、快捷和高效。那么,Spring Boot究竟如何做到這些的呢?
接下來分別針對Spring Boot框架的依賴管理、自動配置和執行流程進行深入分析
### 2.1 依賴管理
問題:(1)為什么導入dependency時不需要指定版本?
在Spring Boot入門程序中,項目pom.xml文件有兩個核心依賴,分別是spring-boot-starter-parent和spring-boot-starter-web,關於這兩個依賴的相關介紹具體如下:
**1.spring-boot-starter-parent依賴**
在chapter01項目中的pom.xml文件中找到spring-boot-starter-parent依賴,示例代碼如下:
```xml
<!-- Spring Boot父項目依賴管理 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent<11./artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
```
上述代碼中,將spring-boot-starter-parent依賴作為Spring Boot項目的統一父項目依賴管理,並將項目版本號統一為2.2.2.RELEASE,該版本號根據實際開發需求是可以修改的
使用“Ctrl+鼠標左鍵”進入並查看spring-boot-starter-parent底層源文件,發現spring-boot-starter-parent的底層有一個父依賴spring-boot-dependencies,核心代碼具體如下
```xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath>../../spring-boot-dependencies</relativePath>
</parent>
```
繼續查看spring-boot-dependencies底層源文件,核心代碼具體如下:
```xml
<properties>
<activemq.version>5.15.11</activemq.version>
...
<solr.version>8.2.0</solr.version>
<mysql.version>8.0.18</mysql.version>
<kafka.version>2.3.1</kafka.version>
<spring-amqp.version>2.2.2.RELEASE</spring-amqp.version>
<spring-restdocs.version>2.0.4.RELEASE</spring-restdocs.version>
<spring-retry.version>1.2.4.RELEASE</spring-retry.version>
<spring-security.version>5.2.1.RELEASE</spring-security.version>
<spring-session-bom.version>Corn-RELEASE</spring-session-bom.version>
<spring-ws.version>3.0.8.RELEASE</spring-ws.version>
<sqlite-jdbc.version>3.28.0</sqlite-jdbc.version>
<sun-mail.version>${jakarta-mail.version}</sun-mail.version>
<tomcat.version>9.0.29</tomcat.version>
<thymeleaf.version>3.0.11.RELEASE</thymeleaf.version>
<thymeleaf-extras-data-attribute.version>2.0.1</thymeleaf-extras-data-attribute.version>
...
</properties>
```
從spring-boot-dependencies底層源文件可以看出,該文件通過<properties>標簽對一些常用技術框架的依賴文件進行了統一版本號管理,例如activemq、spring、tomcat等,都有與Spring Boot 2.2.2版本相匹配的版本,這也是pom.xml引入依賴文件不需要標注依賴文件版本號的原因。
需要說明的是,如果pom.xml引入的依賴文件不是 spring-boot-starter-parent管理的,那么在pom.xml引入依賴文件時,需要使用<version>標簽指定依賴文件的版本號。
(2)問題2: spring-boot-starter-parent父依賴啟動器的主要作用是進行版本統一管理,那么項目運行依賴的JAR包是從何而來的?