iT邦幫忙

2026 iThome 鐵人賽

DAY 1
2

開始工作以後,陸陸續續寫了幾年的程式,Spring boot 幾乎可以說是每位 Java 開發者都會碰到的後端框架。其實從很早以前,就有「想要了解 Spring 的底層到底在做什麼」的想法?但無奈於那時候的實力不夠,沒有太好的資訊查找能力;加上直接硬啃 Spring 的底層源碼超花時間,因此進度雖然是有,但還是相對緩慢。

直到後來找到了幾個有點脈絡的文章跟資源,加上最近幾年 AI 開始發展起來,原本很多懸而未解的問題漸漸能得到答案。加上 Spring 源碼的解析環節也差不多告一段落了。剛好趁著這次的鐵人賽,把這些時間貼貼補補的內容整理出來,分享給大家,希望能給大家帶來幫助,一起在後端的路上持續成長、前進。

本系列文章的標題為「30 篇淺談 spring 框架的核心底層組件」,使用的是 3.3.3 版本的 Spring Boot 原始程式,內容會依序談到 Spring Framework, Spring MVC 與 Spring Boot 相關的啟動原理、部分核心類別、以及各組件的調用順序與背後邏輯,旨在讓一般 web 開發的 Java 工作者可以更了解自己每天都在接觸的 Spring 到底是怎麼啟用與運作的?

此外,雖然本文參考的是 3 系列的 Spring Boot,但篇幅大多還是會放在 2-3 系列共有的內容上,主要考慮到 2 個因素:身邊部分朋友的還是使用 2.x 系列的 Spring Boot 在進行日常開發(寫文還是希望朋友能看);以及 以宏觀的啟動流程來看,2-3 系列的核心組件其實沒有太大的變動,因此讀者不太需要擔心「因為版差,導致大部分的內容都對應不上」或者是「雖然看懂了,但實務開發早已不再這樣使用」的問題。

本系列文章的目標讀者預期是以下幾類:

  1. 熟悉以 Spring Boot 進行 Web 開發,但希望深入理解底層機制的工程師
  2. 想以系統化方式閱讀 Spring Framework、Spring MVC、與 Spring Boot 原始碼的開發者
  3. 希望在架構設計(或技術研究)上具備更細緻 Spring 底層基礎的人
  4. 了解過一點 Java,且同時好奇「Java 是怎麼把一個後端跑起來的?」的研究宅

這邊會預先假設讀者已經了解 Java 的基本原理,也預設都知道一些常見的 Spring Boot 知識,因此文章不會特別說明 @Configuration、@Import 的用途、不會解釋 @Controller, @RestController 和 @ControllerAdvice 差在哪裡、也不會從頭說明 OOP 的封裝繼承多態,跟什麼是模板、單例、責任鏈 ...等設計模式是甚麼。因此文章並不適合新手閱讀。如果上面談到的這些東西你都不太了解,我會建議你可以先把文章存下來,留著等以後變強了再來回頭看。

下面先列了後續 29 天我打算使用的文章標題,大多是些 Spring 的抽象類別或介面,但也有少數幾個值得一提的實體類別。文章的順序並不等於 Spring 啟動時的調用順序,比較像是我自己覺得「先講這個、再講那個,應該會比較連貫也好懂?」的編排方法。當然了,要透過 30 天就把架構的所有細節都描述出來,是不可能做到的。但雖如此,還是期待可以用 30 天的時間,讓讀者大致理解 Spring 的底層運作邏輯。至於能不能做到,就再看看我的寫文功力怎麼樣了(笑)

期待後續各位的閱讀與分享,我是 Pax,我們明天見。


Part. 1: IoC 容器核心篇

Part. 2: 容器基礎設施篇

  • Day 09: ResourceLoader —— 資源的載入存取與路徑解析
  • Day 10: Environment —— 環境配置與多環境隔離
  • Day 11: MessageSource —— 多語系 i18n 與文字訊息管理機制
  • Day 12: ApplicationEventPublisher —— 事件發布與觀察者模式的組件解耦

Part. 3: AOP 與配置驅動篇

  • Day 13: FactoryBean —— 封裝複雜建構邏輯的工廠 Bean
  • Day 14: AopProxy —— JDK 動態代理與 CGLIB 代理的底層實現機制
  • Day 15: Advisor —— AOP 切面代理的規格物件封裝
  • Day 16: AbstractAutoProxyCreator —— 將 Bean 封裝為切面代理對象的自動化引擎
  • Day 17: ConfigurationClassPostProcessor —— 解析 Java Config 與驅動組件掃描的核心類別
  • Day 18: ImportSelector —— 配置類別的動態導入橋樑與 SPI 機制

Part. 4: Spring MVC 篇

  • Day 19: DispatcherServlet —— 請求分發與 Spring MVC 核心處理流程
  • Day 20: Filter —— Servlet 容器規範與請求前置攔截的責任鏈設計
  • Day 21: HandlerMapping —— Spring MVC 的路由與執行鏈組裝機制
  • Day 22: HandlerInterceptor —— Controller 調用鏈的三階段攔截機制
  • Day 23: HandlerAdapter —— Handler 的統一調度與適配器模式實踐
  • Day 24: HttpMessageConverter —— HTTP 串流與 Java 物件的序列化轉換機制
  • Day 25: HandlerExceptionResolver —— 全域異常攔截與錯誤視圖的解析轉換

Part. 5: Spring boot 篇

  • Day 26: WebServerFactory
  • Day 27: SpringBootCondition
  • Day 28: AutoConfigurationImportSelector
  • Day 29: SpringApplication
  • Day 30: 結語

下一篇
Day 2. BeanDefinition —— 生成 Bean 之前的準備工作
系列文
30 篇淺談 Spring 框架的核心底層組件 8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言