10年開發(fā)大牛教你如何學(xué)習(xí)獲取調(diào)試SpringBoot源代碼
閱讀代碼前的準(zhǔn)備
本章內(nèi)容分為兩部分,第一部分將帶大家了解閱讀 Spring Boot 源代碼需要做的準(zhǔn)備工作,包括如何獲取源代碼、源代碼的項(xiàng)目結(jié)構(gòu)、源代碼閱讀工具等內(nèi)容。第二部分重點(diǎn)介紹 SpringBoot 的設(shè)計(jì)理念、設(shè)計(jì)目標(biāo)以及整體框架。
本章默認(rèn)讀者有一定的 Java 編程能力, 并對(duì) Spring Boot 有一定了解和基本的使用經(jīng)驗(yàn)。
本文以寫作時(shí) Spring Boot 最新穩(wěn)定版本 2.2.1 為基礎(chǔ)進(jìn)行講解。該版本需在 Java 程序開發(fā)包 JDK 8.0 (及以上版本)和 Maven 3.3+環(huán)境下運(yùn)行,讀者需提前安裝。
獲取和調(diào)試 Spring Boot 源代碼
獲取 Spring Boot 的源代碼
獲取 Spring Boot 源代碼有兩種方式:直接獲取整個(gè)項(xiàng)目源代碼,創(chuàng)建 Maven 項(xiàng)目后間接加載源代碼。我推薦使用第二種方式。
先介紹第一種方式。直接獲取源代碼方式比較簡單,訪問 GitHub 上的 Spring Boot 項(xiàng)目,通過 git clone 或直接下載 ZIP 壓縮包方式,便可獲取整個(gè)項(xiàng)目源代碼。如果采用 git clone形式,注意下載完成后將代碼切換至 tags 中的 2.2.1.RELEASE 版本。源代碼地址:
htps://github.com/spring-projects/spring-boot。
壓縮包下載完成后,可直接將項(xiàng)目導(dǎo)入 IDE,由 IDE 自動(dòng)進(jìn)行編譯,也可在根目錄下執(zhí)行Maven 命令進(jìn)行編譯,代碼如下。
mvn clean package -Dmaven. test. skip=true -Pfast在執(zhí)行上面命令時(shí),-P 參數(shù)指定了快速編譯,如果需要全量編譯,則-P 參數(shù)值為 full。無論采用 git clone 還是 ZIP 壓縮包形式下載,都會(huì)將整個(gè)項(xiàng)目的所有內(nèi)容下載,使用 IDE編譯或 maven 命令編譯時(shí)會(huì)加載所有依賴 jar 包。如果選擇此種方式獲取源代碼,耗時(shí)較長,請(qǐng)耐心等待。
第二種方式是創(chuàng)建 Spring Boot 的 Maven 項(xiàng)目后間接獲取源代碼,這樣可以精準(zhǔn)下載所需要項(xiàng)目的依賴及源代碼。本書采用此種方式來獲取源代碼,以便更好地與實(shí)例相結(jié)合。該方式具體步驟如下。
步驟 1 創(chuàng)建一 個(gè)簡單的 Spring Boot 項(xiàng)目。
步驟 2 通過 IDE 導(dǎo)入或打開項(xiàng)目。
步驟 3 pom.xml 文件中引 |入所需功能的 jar 包依賴。
步驟 4 通過 IDE 獲取源代碼和文檔。(IDE 提供 下載源代碼或下載文檔功
能,并自動(dòng)關(guān)聯(lián)。)
調(diào)試 Spring Boot 的源代碼
我們通常使用“實(shí)例+debug'方法對(duì) Spring Boot 源代碼進(jìn)行調(diào)試與追蹤。
Spring Boot 默認(rèn)采用 main 方法啟動(dòng),入口方法為 SpringApplication 類的 run 方法。創(chuàng)建項(xiàng)目后會(huì)默認(rèn)生成類似以下入口類代碼:
@SpringBootApplication
public class DemoApplication
public static void main(String[] args) {
SpringApplication. run(DemoApplication.class, args);
}
}比如,需要學(xué)習(xí) SpringApplication 類初始化功能時(shí), 可進(jìn)入該類內(nèi)部,通過 IDE 下載相關(guān)源代碼,然后在具體位置打上斷點(diǎn),通過 debug 模式啟動(dòng)程序。當(dāng)程序運(yùn)行到斷點(diǎn)處時(shí),便可查看上下文相關(guān)信息及處理流程。
讀者在實(shí)踐的過程中,涉及每個(gè)具體知識(shí)點(diǎn)的源代碼查看時(shí),可以先編寫具體實(shí)例,再 debug 運(yùn)行實(shí)例并通過斷點(diǎn)來跟蹤具體執(zhí)行流程。
SpringBoot源代碼的目錄結(jié)構(gòu)
Spring Boot 項(xiàng)目的目錄結(jié)構(gòu)分為兩部分,一部分 是整個(gè)開源項(xiàng)目的目錄結(jié)構(gòu),另-部分是細(xì)化到 jar 包級(jí)別的目錄結(jié)構(gòu)。下面我們一起從整體到局部了解 Spring Boo 項(xiàng)目的目錄結(jié)構(gòu)。
Spring Boot 的整體項(xiàng)目結(jié)構(gòu)
圖 1-1 所示是 Spring Boot 在 GitHub 上 2.2.1.RELEASE 版本源代碼頂層目錄結(jié)構(gòu)。

不同版本之間的 Spring Boot 源代碼的頂層目錄結(jié)構(gòu)會(huì)有所變化,但并不影響其核心功能。2.2.x.RELEASE 版本由以下子模塊構(gòu)成。
:spring-boot-project: Spring Boot 核心項(xiàng)目代碼,包含核心、工具、安全、文檔、starters等項(xiàng)目。
spring-boot-tests: Spring Boot 部暑及集成的測試。
關(guān)于頂層目錄結(jié)構(gòu),我們有個(gè)簡單了解即可,從 1.5.x 到 2. 1.x 再到 2.2.x 版本,該層級(jí)的目錄結(jié)構(gòu)在不停地發(fā)生變化。
spring-boot-project 項(xiàng)目結(jié)構(gòu)
spring-boot-project 目錄是在 Spring Boot 2.0 版本發(fā)布后新增的目錄層級(jí),并將原來在Spring Boot 1.5.x 版本中的一級(jí)模塊作為 spring-boot-project 的子模塊。該模塊包含了Spring Boot 所有的核心功能。
-spring-boot: Spring Boot 核心代碼,也是入口類 SpringApplication 類所在項(xiàng)目,是本文重點(diǎn)介紹的內(nèi)容。
-spring boot -actuator:提供應(yīng)用程序的監(jiān)控、統(tǒng)計(jì)、管理及自定義等相關(guān)功能。
-spring -boot actuator -autoconfigure:針對(duì) actuator 提供的自動(dòng)配置功能
-spring-boot-autoconfigure: Spring Boot 自動(dòng)配置核心功能,默認(rèn)集成了多種常見框架的自
動(dòng)配置類等。
.spring-boot-cli:命令工具,提供快速搭建項(xiàng)目原型、啟動(dòng)服務(wù)、執(zhí)行 Groovy 腳本等功能。
-spring-boot- dependencies:依賴和插件的版本信息。
-spring boot deutoos:開發(fā)者工具,提供熱部署、實(shí)時(shí)加載、禁用緩存等提升開發(fā)效率的功能。
.spring-boot-docs:參考文檔相關(guān)內(nèi)容。
spring-boot-parent: spring-boot-dependencies 的子模塊, 是其他項(xiàng)目的父模塊。
-spring-boot properties-migrator: Spring Boot 2.0 版本新增的模塊,支持升級(jí)版本配置屬性的遷移。
-spring boot starters: Spring Boot 以預(yù)定義的方式集成了其他應(yīng)用的 starter 集合。
:spring-boot-test:測試功能相關(guān)代碼。
-spring-boot-test- autoconfigure:測試功能自動(dòng)配置相關(guān)代碼。
spring-boot-tools: Spring Boot 工具支持模塊,包含 Ant、Maven、Gradle 等構(gòu)建工具。
本文以 spring-boot 和 spring-boot-autoconfigure 模塊為核心,同時(shí)會(huì)涉及 actuator、test.loader 等相關(guān)項(xiàng)目的源代碼。
本文給大家講解的內(nèi)容是:獲取和調(diào)試SpringBoot源代碼、SpringBoot源代碼的目錄結(jié)構(gòu)
下篇文章給大家講解的是源代碼閱讀工具、SpringBoot的設(shè)計(jì)理念和目標(biāo)、整體架構(gòu);
覺得文章不錯(cuò)的朋友可以轉(zhuǎn)發(fā)此文關(guān)注小編;
感謝大家的支持!
本文就是愿天堂沒有BUG給大家分享的內(nèi)容,大家有收獲的話可以分享下,想學(xué)習(xí)更多的話可以到微信公眾號(hào)里找我,我等你哦。
