談談關於spring源碼閱讀的方式

緣起

筆者在閱讀spring源碼的時候也是藉助了很多相關資料。如果你看過spring的話,你就會明白,spring的源碼不復雜,複雜的是spring的思想和設計模式,很多時候源碼看着看着,就不知道走到哪裏去了。spring中使用了大量的設計模式,以至於spring的繼承,實現,父子類關係變的相當複雜,所以在此談一談幾點關於怎麼閱讀的心得。

心得

源碼閱讀要找入口

我們看spring的源碼,最首要的任務就是要搞清楚入口在哪裏,這樣我們才知道從哪裏開始看,spring有很多入口,但是我們可以從例如以下入口開始看
在這裏插入圖片描述
我們知道這是手動加載XML進行讀取的方式。通過這裏,我們就可以加個斷點,然後對spring進行調試

警惕閱讀細枝末節

在spring中可能A方法有BCDEFG六個方法,而B方法中又有HIJKLM留個方法,然後H中又有N個方法,如果我們循着B方法裏面去看你會發現翻到最裏面你已經忘記了你要幹嘛了,對於這種細枝末節過多的方法,我們一定要警惕,建議是先把A方法中的BCDEFG六個方法看懂。這跟我們玩遊戲做任務是一樣的,也就是說先把主線做了,再去做支線。

一定要連蒙帶猜

前面說我們在閱讀的時候先要把主線讀懂,那麼如何能夠在不細讀支線代碼的時候能搞清楚主線的流程呢?有個很重要的方法就是連蒙帶猜,在spring中,無論是變量還是方法的命名都是很規範的,也就是說,我們通過一個方法的名字,就基本能猜出這個方法在幹嘛。例如refreshBeanFactory很明顯能猜出來是刷新Bean工廠,getBeanFactory是獲取Bean工廠

另一個思想就是假想,也就是說,你要去想,如果讓你來設計這個東西你會怎麼設計?比如說讓我們來設計一個IOC容器,你會怎麼設計呢?我們首先就要想,既然是容器,那麼Java裏面的容器有哪些呢?List?數組?Map?Set?,我們知道,注入的時候是通過Bean的名字或者類型id等來註冊的,那麼通過把Bean的標識作爲一個key,Bean本身作爲一個value的Map來實現這個IOC容器是不是很合理呢?
然後我們又猜想這個Bean是怎麼放到IOC中的呢?我們知道我們的Bean是配置XML中,那麼IOC是不是解析了這個XML然後得到我們配置的東西呢?怎麼解析的呢?DOM4J或者是DOM或者是其他什麼方式呢?我們就可以通過這些猜想,大概想清楚spring中是怎麼進行這些動作的,然後我們再去看源碼以驗證我們的思想。
事實上,spring中的IOC容器確實是通過一個Map來實現的。這點後續會介紹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章