Spring 源碼學習總結篇

爲何讀源碼

在平常工做中,產品不斷寫業務需求,他們加班一天,咱們開發就得工做一週來完成。git

業務領域達到必定地步後,發現重複的業務代碼讓我不斷的粘貼、複製和修改,日復一日,擔憂本身變成一個業務代碼生產機器,而沒法面對新技術和環境變化。github

同時也有危機感,長江後浪推前浪,本身不繼續學習的話,很快就會有人超過。spring

並且我算是比較熱心的好同窗,喜歡幫別人解決問題和記錄解決方案,因此不但願在別人問我工做中有什麼經常使用的框架,遇到這個問題該怎麼辦,我卻回答不上的感受設計模式

一樣,但願你們懂得提問的藝術,經過度娘和谷歌都沒找到解決方案後,再去與別人探討問題,否則會被鄙視的,別問我爲啥懂得/(ㄒoㄒ)/網絡

因此就沉下心來,從工做中一直在用的 Spring 框架源碼學起,看大牛們的代碼設計。框架


怎麼讀源碼

雖然我拿 Spring 做爲例子,但模板能夠套用到你想閱讀的任何源碼上~jvm


查官方文檔

官方文檔地址學習

能夠說,開源框架的官方文檔是最完整,最全面的使用和說明介紹,詳細到每行代碼的用途和異常都有說明(大霧),反正只有想不到,沒有官方文檔沒寫的。編碼

若是在運行當中,跟官方文檔不符合的場景,應該算 BUG,那麼讀者發現了,能夠給他們提 ISSUE,爲開源生態圈作出本身的一份貢獻~命令行


查技術社區

不少開源框架的文檔是英文寫的,這是個不爭的事實,因此直接看英文的話,會很吃力。

但國內也有大牛和大神,咱們會從中學習,而後不斷改良和吸取優勢,而後再建立更符合國內需求的框架。極客們會將翻譯或者改良建議公佈到網絡,與咱們你們進行分享。

例如去 CSDN掘金 和思否等技術社區,都已經有人翻譯或者寫了本身的看法,咱們先從中文文檔學習,遇到疑惑或者官方文檔更新了,與官方文檔比對後,得出本身最後的結論和使用方法。


總結與分享

我喜歡學習,但討厭無心義的學習

以前看到微笑大神在 知識星球「Java極客技術」 裏寫的主題「如何高效的學習」:

文章中提到了「學習金字塔」模型,有如下七個層次:

1 聽講 2 閱讀 3 視聽 4 演示 5 討論 6 實踐 7 教給他人

而後學習內容的保留率從上往下依次遞增:

9b6abed3e6b0831bab89d6067a17280d.png

下面是二者對比後得出的結論:


減小被動學習

咱們上學時經歷過太多的被動學習,高中時還好,老師上課時,臺下的學生認真聽講,下課後還記得老師在課堂上講的大部份內容。

但到了大學後,臺下的學生更多,老師沒法兼顧這麼多學生,學生也有不少課堂外的活動,還記得有張動圖,兩個學生在上高數課,老師在黑板上寫了幾行公式,而後學生瞌睡,眯眼了一會,睜開眼睛,發現黑板上寫滿了高等數學定理...

因此只是看書看視頻卻不動手實踐,這樣被動學習的效率低,若是到最後忘得一乾二淨,這樣的學習會顯得無心義。


學會主動學習

我也認爲學習不是一步登天,也不可能將本身只看過一次的內容徹底記牢,跟微笑哥同樣,我一年前看過 jvm 的知識,後來工做中用得比較少,在須要用到的時候,我又回去看了一遍書本,後來我將這些經常使用的命令總結了一下,在後來使用時,一邊翻閱筆記,同時命令行敲得更快了一點!

網上也有不少學習視頻,看視頻的同時,要本身敲下代碼,可以正常運行起來,成功運行時會有一種成就感,同時也會加深本身的理解,能夠在下次遇到類似場景時進行借鑑,去解決實際問題。

因此不能再侷限於被動學習的階段,這樣很容易學了就忘,要踏出一步,主動學習,動手實踐,而後進行總結和分享,不斷進行輸出,讓學習更有意義~


從中收穫了什麼

這裏的收穫也有兩種類型:

目標收穫

  1. 加深了 Spring 框架的基礎結構IoCAopMVC 等基礎概念有了更深的瞭解

  2. 良好的代碼風格

  • 舉個例子,我的感受,在代碼設計上,源碼作到了高內聚,低耦合,通用和規範性的抽象到頂層類,例如看到不少 abstract 抽象父類,裏面作了不少複雜操做,但會提供一些模板方法,經過繼承,讓子類去擴展實現,在子類調用父類的方法,作到了 「關閉修改,開放擴展」
  • 還有入口方法進行容易理解,羅列了關鍵步驟,而後複雜實現交給了子類,同時變量和方法名也很直觀,看其名,知其義,註釋也不少,可以減低閱讀難度。
  1. 多種設計模式 簡單工廠、工廠方法、單例模式、模板方法等等,都在源碼中有所體現,在瞭解總體結構時,能夠彌補以前看設計模式書籍的不足,加深對它們的理解 (PS:「Java極客技術」知識星球裏面每週都會有設計模式的分享,能夠加入進去,在裏面一塊兒加深設計模式的學習

經過上面的學習,在以後本身編碼時,會注意到這些細節,而後不斷提升本身的編碼能力


額外收穫

  1. 提高寫做能力
  • 學會一個 demo 很容易,成功運行雖有點難度,但根據教程和資料,弄成功是沒有問題的,難就難在寫出來教會別人。

  • 以前寫的更多偏向於速記型,是爲了本身查看的,根據關鍵信息速查,本身回顧也得花上一段時間,因此別人不必定能看懂。此次想要讓本身回顧起來更快速,因而在語言組織以及格式編排上畫了一點時間,儘量的完善筆記,提高了寫做的能力。

  1. 轉換心情
  • 不厚道的說一句,現在太多販賣焦慮的推文,我也清楚明白人無憂慮和追求,是不會有所進步的。

  • 但我也認識到,若是看到焦慮卻想着坐享其成,那是更可怕的事情,一不當心就會掉落營銷者他們所設的陷阱,中止了前進。

  • 何不換種思路,心中保持擔心,但心態放輕鬆,不要想着坐享其成,而是克服苦難,繼續加強本身的技能。因此此次的沉澱學習也是想讓本身冷靜下來,沉浸在書籍中,獲取解決一個又一個疑問的喜悅

  • 客觀的說,個人擔心仍是沒有消除,但個人心態轉變了一些,想要經過增加的技術體現本身的價值,在實際工做中解決實際問題,獲得別人的確定。


一千個讀者有一千個哈姆雷特,一樣的書籍你們的感悟應該也會不同,以上只是我的的分享,期待聽到朋友們的留言

我是驚奇,一個追求自律和技術,但願帶給你驚喜和奇妙的陽光宅男~ 期待下期再會


參考資料

一、 github.com/ryanhanwu/H…

相關文章
相關標籤/搜索