1. 程式人生 > 程式設計 >Spring 原始碼學習總結篇

Spring 原始碼學習總結篇

為什麼讀原始碼

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

業務領域達到一定地步後,發現重複的業務程式碼讓我不斷的貼上、複製和修改,日復一日,擔心自己變成一個業務程式碼生產機器,而無法面對新技術和環境變化。

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

而且我算是比較熱心的好同學,喜歡幫別人解決問題和記錄解決方案,所以不希望在別人問我工作中有什麼常用的框架,遇到這個問題該怎麼辦,我卻回答不上的感覺

同樣,希望大家懂得提問的藝術,通過度娘和谷歌都沒找到解決方案後,再去與別人探討問題,不然會被鄙視的,別問我為啥懂得/(ㄒoㄒ)/

所以就沉下心來,從工作中一直在用的 Spring

框架原始碼學起,看大牛們的程式碼設計。


怎麼讀原始碼

雖然我拿 Spring 作為例子,但模板可以套用到你想閱讀的任何原始碼上~


查官方檔案

官方檔案地址

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

如果在執行當中,跟官方檔案不符合的場景,應該算 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. 轉換心情
  • 不厚道的說一句,如今太多販賣焦慮的推文,我也清楚明白人無憂慮和追求,是不會有所進步的。

  • 但我也認識到,如果看到焦慮卻想著不勞而獲,那是更可怕的事情,一不小心就會掉落營銷者他們所設的陷阱,停止了前進。

  • 何不換種思路,心中保持擔憂,但心態放輕鬆,不要想著不勞而獲,而是克服苦難,繼續增強自己的技能。所以這次的沉澱學習也是想讓自己冷靜下來,沉浸在書籍中,獲取解決一個又一個疑問的喜悅

  • 客觀的說,我的擔憂還是沒有消除,但我的心態轉變了一些,想要通過增長的技術體現自己的價值,在實際工作中解決實際問題,得到別人的肯定。


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

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


參考資料

1、 github.com/ryanhanwu/H…