SpringBoot原理深入及源碼剖析


傳統的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包是從何而來的?

 

這些內容,是從拉勾教育的《Java工程師高薪訓練營》里學到的,課程內容非常全面,還有拉勾的內推大廠服務,推薦你也看看。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM