-
1 # 程式猿W
-
2 # 樂淘學程式設計
建議從網上播客中找一個自己DIY系列的博文,自己寫IOC容器之類的先找著例子實現一下,理解其中的程式碼,再回過頭去看spring的原始碼,仍然建議找相關研究spring原始碼的播客對照檢視,這樣子是最輕鬆最便捷的方式。如果自己在對自己實力無法評估的情況下茫然開始對自己的學習信心會有些打擊。
-
3 # 強哥教你學程式設計
spring作為Java最重要的框架之一,大部分企業級應用都會用到的,它大大的提高了開發的效率,對於新手來說,可能無從下手,如果觀看原始碼更會有所吃力,作為7年工作的老程式設計師,我對研讀spring原始碼有自己的理解。我覺得需要理解以下幾個脈絡,然後再去讀spring原始碼就沒有那麼吃力了。
首先我們透過一個最簡單的例子來說明:
第一點:bean是怎樣解析的在用spring之前,物件的建立、屬性的注入和依賴都是靠我們自己去維護,尤其迴圈依賴如果操作不當就會出現死迴圈,如果加入spring,這些內容都不需要我們去維護了,這些工作交給了spring容器IOC去維護了,在示例當中ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");程式碼就是spring對所有bean解析,不管是配置檔案的解析還是註解解析,都是在這個時間處理的,所以透過這段程式碼跟蹤到原始碼中去,你就會理解這一點了。我姑且叫它準備階段吧。
第二點:bean是怎樣載入的在第一點所有的bean的解析都在bean工廠裡面了,但是都是半成品,是一個一個的零件,如果想獲取成品,就是獲取我們需要的bean,就需要把這些半成品進行加工了。TestBean testBean = (TestBean) context.getBean("testBean");這一段程式碼就是加工後我們獲取的成品TestBean物件了。所以跟蹤這一段程式碼你會了解bean是怎樣生成的。
第三點:spring AOP是機制是怎樣的前面兩點就是我們所說的spring容器IOC的依賴管理,也是spring最重要的內容,AOP不是spring特有的,你可以透過原始碼去了解spring怎樣去實現AOP的。
第四點:spring在web應用中的springmvc是怎樣一個邏輯對於一個框架,web應用是必不可少的,所以spring也為我們提供了非常強大的springmvc.
回覆列表
1、學習Spring原始碼前,需要想以下幾點
2、為什麼要學習Spring原始碼?
3、學習Spring原始碼的方法
4、總結
學習Spring原始碼前,我們需要想以下幾點?① 為什麼會存在Spring框架,能做什麼?如果要我來做,我該怎麼做?
② 然後我們在學習的過程中會遇到許多概念,比如IOC、AOP、DI、BeanFactory、ApplicationContext等一些概念,需要詳細瞭解明白
IOC: 快取Bean的地方。存放在Map容器中。
DI: 可以是set/get/constructor,透過反射進行注入
AOP:為了增強 原始Bean的功能(代理技術)
④ 如果需要我來做,我會怎麼做? (怎樣手寫一個mini版Spring)
(1) 我們要預設一些規則,比如定義一些掃描註解、掃描哪些 包?
(2) 然後按照一定的順序去載入掃描包下的Class類,放入Map中。
(3) 掃描上面的Class 類,然後判斷是否實現了一些註解,如果實現了,例項化後放入Map中
(4) 依賴注入,給例項化的Bean進行屬性注入。
為什麼要學Spring原始碼?在學習原始碼前,我們需要知道為什麼需要學原始碼?
提升技術功底:學習原始碼的優秀思想,比如學些一些問題的解決思路,優秀的設計模式,從而能很大的提升自己的功底。深度掌握技術框架:如果我們原始碼看多了,對於新技術或者框架的掌握速度會大幅提升,看下框架的Demo就能知道底層的實現,技術框架很多都是透過用的,比如,舉幾個例子① 為什麼Mybatis 我們只需要寫Dao介面就可以了,因為Spring 底層幫我們做了代理,用到的技術就是動態代理。
② Dubbo 的遠端呼叫為什麼和呼叫本地方法一樣呢?原因也是動態代理,Dubbo 把 呼叫的細節封裝在代理類中。
上述的技術都是一通百通,百變不離其宗。
3 快速定位線上問題: 遇到線上的問題,特別是框架原始碼裡的Bug,能夠快速定位,這就是你和被人的優勢。
4. 對面試大有益處: 面試一線網際網路公司對於框架技術一般都會遇到原始碼級別的。
5.擁抱開源社群:參與到開源專案的研發,結實更多大牛
學習Spring原始碼的方法1. 先使用:先看官方文件快速掌握框架的基本使用,
2. 除錯的時候,完全可以在執行環境,匯入jar包就能除錯,可以由針對性的打斷點
3. 抓主線:找一個demo入手,順藤摸瓜快速靜態看一遍框架的主線原始碼(抓大放小),畫出原始碼主流程圖,切勿一開始就陷入原始碼的細枝末節,遇到不明白的可以才,七分猜測三分驗證,如果猜對了,就會有成就感。
4. 畫圖做筆記:總結框架的一些核心功能點,從這些功能點入手深入到原始碼的細節,邊看原始碼邊畫原始碼走向圖,並對關鍵原始碼的理解做筆記,把原始碼裡的閃光點都記錄下來,後續借鑑到工作專案中,理解能力強的可以直接看靜態原始碼,也可以邊看原始碼邊debug原始碼執行過程,觀察一些關鍵變數的值
5.整合總結:所有功能點的原始碼都分析完後,回到主流程圖再梳理一遍,爭取把自己畫的所有圖都在腦袋裡做一個整合
總結1、官網是最好的一手資料。
2、一定要在掌握框架的使用以後再去研究原始碼
3、原始碼可能需要你的一些技術準備:比如 java技術功底、java設計模式等
4.學習最好的方法就是兩個字: 重複,看原始碼的 第一遍是很痛苦的,看第二遍 第三遍 ,你的思路就會越來越清晰。
5、學習最好的方法就是重複,耐得住 寂寞,你才會成為 最終的王者。