源码研读碰到的问题
#1.如何通過入口找到程序進入的下一步
一般在最外一層的調用方法就是入口程序了。
?
#2.如何找到最小類的向上繼承關系
一般情況,我們找到了入口類,然后通過idea往上查看類的關系,即可得到整個類體系的繼承關系。
我們就可以得到下面這個類圖
接著,看源碼要借鑒別人的經驗,所謂站在巨人的肩膀上,可以看得更高。
在看源碼的時候,可以先根據Diagrams展現出來的類圖,先弄清楚每個類的職責,然后再去讀里面的源碼,這樣會更好的理解,相當于掌握了大的方向,然后再去細看里面的方法。
在讀這些底層源碼的時候,總結了一個經驗:
使用面向對象進行編程:
1.先把一個類的功能,定義成不同的接口,不同的接口實現了部分功能,最后到最下面實際的類的時候,因為是繼承或實現父類,上面的接口類已經實現了部分功能了。所以到最后的具體實現類邏輯什么的都比較簡單了。
2.如何把一些細節往外拋出去,一般一個抽象類里可以實現部分細節功能,但如果自己不能實現的,這時候可以再定義抽象方法,把接下來的細節拋出去下一級。由他的實現類或者繼承類來實現。
3.這些方向的實現過程中,還會夾帶著各種設計模式,設計原則等,我們可以細品。
#3.介紹四級接口繼承體系
#3.1.一級接口
BeanFactory做為一個主接口不繼承任何接口,暫且稱為一級接口。
#3.2.二級接口
AutowireCapableBeanFactory、HierarchicalBeanFactory、ListableBeanFactory 3個?接?繼承了它,進?功能上的增強。這3個?接?稱為?級接?。#3.3.三級接口
ConfigurableBeanFactory 可以被稱為三級接?,對?級接? HierarchicalBeanFactory 進?了再次增強,它還繼承了另?個外來的接? SingletonBeanRegistry。#3.4.四級接口
ConfigurableListableBeanFactory 是?個更強?的接?,繼承了上述的所有接?,?所不包,稱為四級接?。#4.總結
-- BeanFactory 是Spring bean容器的根接?。 ? ? 提供獲取bean,是否包含bean,是否單例與原型,獲取bean類型,bean 別名的api。 |-- -- AutowireCapableBeanFactory 提供??的裝配功能。 |-- -- HierarchicalBeanFactory 提供?容器的訪問功能。 |-- -- -- ConfigurableBeanFactory 如名,提供factory的配置功能,眼花繚亂好多api。 |-- -- -- -- ConfigurableListableBeanFactory 集?成者,提供解析,修改bean定義,并初始化單例。 |-- -- ListableBeanFactory 提供容器內bean實例的枚舉功能.這邊不會考慮?容器內的實例。?
看源碼,肯定是為了學習人家怎么應用設計模式和設計原則了。在這些類的設計過程中,就體現出接口隔離原則。看上面的總結,各個接口類的職責。
#4.1.繼承關系的2個抽象類和2個實現類
1. AbstractBeanFactory 作為?個抽象類,實現了三級接? ConfigurableBeanFactory ?部分功能。 2. AbstractAutowireCapableBeanFactory 同樣是抽象類,繼承? AbstractBeanFactory ,并額外實現了?級接? AutowireCapableBeanFactory 。 3. DefaultListableBeanFactory 繼承? AbstractAutowireCapableBeanFactory ,實現了最強?的四級接? ConfigurableListableBeanFactory ,并實現了?個外來接?BeanDefinitionRegistry ,它并?抽象類。 4. 最后是最強?的 XmlBeanFactory ,繼承? DefaultListableBeanFactory ,重寫了?些功能,使??更強?。總結:BeanFactory的類體系結構看似很復雜,實際上由上而下井井有條,非常容易了解。
#5.開發者開發程序和程序運行的不同
開發者開發程序,都是置頂向下的,而程序運行的時候,則是置底向上調用。
抽象類可以創建對象的嗎?
Java抽象類不可創建對象,但可以調用靜態方法將建一個對象,利用多態創建子類對象上轉成父類類型。#6.查看一個類的所有子類以及子類的子類并以層級關系顯示
我們可以在類中點擊頂部菜單
?
快捷鍵是ctrl+H
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: IDEA中debug
- 下一篇: UML在powerDesigner的使用