目錄
- 一、背景說明
- 二、SpringBoot工程
- 三、應用上下文
- 四、資源加載
- 五、應用環(huán)境
- 六、Bean對象
- 七、Tomcat服務
- 八、事件模型
- 九、配置加載
- 十、數(shù)據(jù)庫集成
- 十一、參考源碼
服務啟動堪稱Spring源碼設計的答案;一、背景說明初學SpringBoot框架時,第一次啟動服務,直呼什么鬼?只需要簡單的幾步配置,幾個核心的注解,就可以快速實現(xiàn)工程的搭建和運行;
雖然從Spring框架遷移到SpringBoot框架,在初期會有很多的不適應,但是更好用的框架會快速得到認可,從而成為主流的技術選型;
對于大多數(shù)的框架或者組件來說,如果使用起來越是簡便,那么其內部的封裝策略就越是復雜;
比如在Spring框架更新到SpringBoot版本時,其用法的簡便與內部封裝的復雜性已經(jīng)形成強烈的對比;再到SpringCloud微服務框架時,其封裝邏輯復雜到離譜;
對于服務端的開發(fā)來說,繞不開對Spring框架的深度學習,如果單純站在源碼閱讀的角度,建議先熟讀SpringBoot啟動流程,然后再適當擴展其他源碼塊;
二、SpringBoot工程首先聊一聊閱讀源碼的基本思路,從一個極簡的案例開始,圍繞案例中的核心API作為切入點,通過對源碼邏輯的斷點調試,從而體會其設計的原理;
閱讀SpringBoot的源碼,可以從服務啟動方法作為切入點,然后不斷的分析啟動過程涉及到的核心API和設計原理,再基于具體的啟動日志去分析抽象的加載邏輯;

文章插圖
在看具體的源碼之前,還需要說下分析思路,Spring項目中,要注意每個API所屬工程與層級,然后再去分析API之間關系,核心的構造、屬性、方法等;
在SpringBoot的啟動類中,有兩個核心的切入點,一個是類的構造方法,完成一列的初始化動作;一個是啟動方法,實現(xiàn)應用上下文的創(chuàng)建和裝載;
構造方法:

文章插圖
啟動方法:

文章插圖
需要說明的是,由于SpringBoot服務啟動過程涉及源碼過多,所以上面的源碼中只是羅列部分的核心切入點,然后圍繞這些關鍵流程展開,分析一些常見的源碼設計;
另外說明一點,以下源碼的核心版本:
JDK-1.8,spring-5.2.4,spring-boot-2.2.5,在不同的版本下源碼會存在差異;三、應用上下文服務啟動時,根據(jù)應用類型判斷創(chuàng)建的上下文,此處啟動的是基于servlet的web應用,所以也依賴相應的web服務器,默認為Tomcat;
啟動方法的核心在于對應用上下文的創(chuàng)建、準備、刷新,應用上下文是一個十分抽象的描述,可以理解為應用運行的整體環(huán)境,其中涉及到資源加載,配置文件裝配,運行服務的管理等,后續(xù)的源碼分析都圍繞該API展開;

文章插圖
ApplicationContext:應用上下文核心接口,在該接口中所有的方法都是只讀模式,即只能通過Get方法進行訪問;
ConfigurableApplicationContext:上下文配置擴展接口,提供了應用上下文的配置能力,生命周期的維護,以及在關閉之后的相關資源釋放;
經(jīng)驗總結擴展閱讀
- 學車時如何正確啟動發(fā)動機?
- 實用帖:從成都到稻城亞丁,最全自駕游攻略
- 湯的種類
- 魚肉魚湯怎么做
- 誰知道魅族4怎么清理后臺運行
- 打傘紫外線也會從地面反射嗎
- 集合符號表示的意義
- 牛戰(zhàn)士從不摘下他的面具是什么意思?
- 在PE文件中簡單注入代碼,實現(xiàn)在啟動前彈窗
- 兩個人在一起說說
