【初學】Spring源碼筆記之零:閱讀源碼
- 2020 年 7 月 10 日
- 筆記
- JAVA, spring, Spring源碼筆記, 源碼
筆記要求
- 了解
Java
語言 - 了解
Spring Framework
的基礎 - 會使用Maven
關於本筆記
起因
- 本職數據分析,為公司內部人員開發數據處理系統,使用了Python/Django+Bootstrap的選型,完成後不甚滿意,便試著學習C#,第一次接觸C#的Web框架完全懵了,後來才轉向Java,有了懵過之後的C#/Web資料經驗,大概明白了Spring Framework的門道,發現Spring其實應該與C#/Web差不多吧。
- 大概明白了Spring Springwork的編寫,到使用Spring Security時,嗯~複製這段配置程式碼到這裡確實可以運行起來;咦?我怎麼配置才能達到這種要求?
- 開始搜索Spring Security資料,對於其原理的解釋,或太深或太淺或僅在概念層次,於是想深挖其詳細原理。使用我心愛的Chrome瀏覽器到打開Spring Security官網文檔,右上角的翻譯按鈕正待蠢蠢欲動,我的天!那麼多!不管了,開始讀,咦?怎麼搞的,好多概念上的東西。不是我想要的,於是想著開始閱讀源碼。
- 在幾個月以前就試著讀源碼,但是到昨天才感覺到自己會看源碼。
該筆記水平
- 不怎麼地
- 但不能保證該筆記面向Spring的初學者
源碼初次閱讀技巧
不知道能不能適用於別人。
由於在筆記中不會詳細介紹Spring的基礎,要求可以看懂以下示例程式碼
1. 定一個目標
即為什麼要讀源碼?想從源碼中得到什麼?
比如在一些Spring基礎資料中常出現的使用ApplicationContext獲取Bean的示例。
// //gitee.com/exidot/ssn/blob/master/sf5/src/main/java/cn/exidot/ssn/sf5/Main.java
public class Main {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("application_context.xml");
Duck duck = context.getBean("duck", Duck.class);
duck.tryFly();
}
}
那麼問題來了:
- BeanFactory作為Spring概念中的一個核心概念,與ApplicationContext的關係是怎樣的?
- Spring Framework框架是如何實現的ApplicationContext?
- ClassPathXmlApplicationContext是如何解析application_context.xml和載入Bean的?
- 關於單例Bean與Prototype多例Bean在Spring中的生命周期如何?
- …
2. 查看相關類繼承結構
作為初學,學習ApplicationContext,需要先找到它的一個實現類,從實現類入手會更容易。
這是用Idea生成的ClassPathXmlApplicationContext類圖:
3. 先大概看一下類圖結構,從上而下依次閱讀源碼
我的閱讀方式是:
- 在官網API Doc文檔先查看各欄位與函數的程式碼文檔(源碼中也有,但是複製到Google 翻譯中會存在注釋符號)
- 然後在Idea中查看源碼實現
- 在閱讀函數等程式碼時,遇到不懂的類跟進去查看
- 注意你閱讀源碼想要得到的知識,不必跟讀的過分細緻。
4. 記錄學習知識
學習之後整理下源碼內容,捋一下思路。