作者:小傅哥
部落格:https://bugstack.cn
沉澱、分享、成長,讓自己和他人都能有所收穫!
一、為什麼手寫Spring
這個與我們碼農朝夕相處的 Spring,就像睡在你身邊的媳婦,你知道找她要吃、要喝、要零花錢、要買面板。但你不知道她的倉庫共有多少存糧、也不知道她是買了理財還是存了銀行。 開個玩笑,接下來我要正經了!
為什麼 Spring 天天用,但要想去讀一讀原始碼,怎麼就那麼難!因為由Java和J2EE開發領域的專家
Rod Johnson 於 2002 年提出並隨後建立的 Spring 框架,隨著 JDK 版本和市場需要發展至今,至今它已經越來越大了!
當你閱讀它的原始碼你會感覺:
- 怎麼這程式碼跳來跳去的,根本不是像自己寫程式碼一樣那麼
單純
- 為什麼那麼多的介面和介面繼承,類A繼承的類B還實現了類A實現的介面X
- 簡單工廠、工廠方法、代理模式、觀察者模式,怎麼用了會有這樣多的設計模式使用
- 又是資源載入、又是應用上下文、又是IOC、又是AOP、貫穿的還有 Bean 的宣告週期,一片一片的程式碼從哪下手
如果只是支離破碎的背點不成體系的Spring知識,你想完整的畫出一個 Spring Bean 物件的生命週期都很難! 親身經歷,整整花費了3個月才把 Spring Bean 的生命週期全部摸透徹,有多透;知道了掃描載入物件
、定義BeanDefintion
、屬性佔位符
、BeanFacePost在Bean物件例項化之前提供修改BeanDefintion屬性的機制
、Bean物件JDK和Cglib例項化
、Aware感知介面
、BeanPostProcessor在物件執行初始化時的前置和後置處理
、物件的作用域
、虛擬機器註冊鉤子執行銷燬
等等,我把它們放到一張圖裡,如下:
在我彙總的這份資料,是以 Spring 原始碼學習為目的,通過手寫簡化版 Spring 框架 small-spring,瞭解 Spring 核心原理。在手寫的過程中會簡化 Spring 原始碼,摘取整體框架中的核心邏輯,簡化程式碼實現過程,保留核心功能,例如:IOC、AOP、Bean生命週期、上下文、作用域、資源處理等內容實現。
二、下載我整理的PDF
用了3個月的時間,整理寫出一整套簡化版的 Spring 原始碼,同時也把對應每一個實現的步驟都編寫了文章,介紹設計思路、實現過程以及知識的擴充套件,希望這樣的資料也能幫助你成為 Spring 的“精通”
者,至少看過以後你可以不那麼費力的閱讀Spring原始碼了!
small-spring:https://github.com/fuzhengwei/small-spring
讀者交流:在學習的過程中,遇到任何問題,歡迎給我提交issue
Hello, world of spring ! 你好,spring的世界!
歡迎來到這裡,很高興你能拿到這本書。如果你能堅持看完書中每章節的內容,那麼不僅可以在你的面試求職上有所幫助,也更能讓你對 Spring 核心技術有更加深入的學習。
本倉庫以 Spring 原始碼學習為目的,通過手寫簡化版 Spring 框架,瞭解 Spring 核心原理。
在手寫的過程中會簡化 Spring 原始碼,摘取整體框架中的核心邏輯,簡化程式碼實現過程,保留核心功能,例如:IOC、AOP、Bean生命週期、上下文、作用域、資源處理等內容實現。
小傅哥
,之所以開始擼Spring原始碼,主要就是因為在編寫《面經手冊》時,涉及到的Spring原始碼都會寫很多的文字描述、繪製冗長的流程圖稿、做不少的內容鋪墊,但對於新人來說想直接學習這部分內容仍是非常困難的,那麼現在為了讓我以及更多的夥伴能有一個學習的抓手
,我們來一起研究研究什麼是快樂星球!
此專欄為實戰編碼類資料,在學習的過程中需要結合文中每個章節裡,要解決的目標,進行的思路設計,帶入到編碼實操過程。在學習編碼的同時也最好理解關於這部分內容為什麼這樣的實現,它用到了哪樣的設計模式,採用了什麼手段做了什麼樣的職責分離。只有通過這樣的學習才能更好的理解和掌握 Spring 原始碼的實現過程,也能幫助你在以後的深入學習和實踐應用的過程中打下一個紮實的基礎。
另外此專欄內容的學習上結合了設計模式,下對應了SpringBoot 中介軟體設計和開發,所以讀者在學習的過程中如果遇到不理解的設計模式可以翻閱相應的資料,在學習完 Spring 後還可以結合中介軟體的內容進行練習。
原始碼:此專欄涉及到的原始碼已經全部整合到當前工程下,可以與章節中對應的案例原始碼一一匹配上。大家拿到整套工程可以直接執行,也可以把每個章節對應的原始碼工程單獨開啟執行。
如果你在學習的過程中遇到什麼問題,包括:不能執行、優化意見、文字錯誤等任何問題都可以提交issue,也可以聯絡作者:
小傅哥
的微信,fustack
在專欄的內容編寫中,每一個章節都提供了清晰的設計圖稿和對應的類圖,所以學習過程中一定不要只是在乎程式碼是怎麼編寫的,更重要的是理解這些設計的內容是如何來的。
三、書籍目錄
程式碼倉庫:https://github.com/fuzhengwei/small-spring
容器篇: IOC
- 第01章:開篇介紹
- 第02章:建立簡單的Bean容器
- 第03章:實現Bean的定義、註冊、獲取
- 第04章:物件例項化策略
- 第05章:注入屬性和依賴物件
- 第06章:資源載入器解析檔案註冊物件
- 第07章:應用上下文
- 第08章:初始化和銷燬方法
- 第09章:Aware感知容器物件
- 第10章:物件作用域和FactoryBean
- 第11章:容器事件和事件監聽器
代理篇: AOP
- 第12章:基於JDK、CGlib實現AOP切面
- 第13章:把AOP擴充套件到Bean的生命週期
- 第14章:自動掃描Bean物件註冊
- 第15章:通過註解注入屬性資訊
【PDF專屬】
第16章:給代理物件設定屬性注入
高階篇:Design
【PDF專屬】
第17章:三級快取處理迴圈依賴【PDF專屬】
第18章:資料型別轉換
四、收尾
心懷天下,聲色犬“碼”。生有熱烈,藏於俗常!
19.8、20.8、21.8,滿滿的都算上,小傅哥已經在這條路上摸索了兩年多了,從沒有粉絲基礎
、沒有寫作經驗
、沒有技術文章沉澱
、當然也沒有運營技巧,一步步走來遇到了很多粉絲夥伴的支援、號主朋友的關心、平臺運營的幫助,慢慢的長成了一顆倔強的技術小樹!
兩年多來,寫了8個專題,22個類別,255篇+文章!並於 2021年04月23日
,圖書節,我的第一本技術書《重學Java設計模式》出版了。不久以後我感受過圖書衝榜到銷量榜第一、在圖書館看到我的技術書、被國外的粉絲夥伴購買帶出國門,還看到有個女孩買來作為禮物送給他的男友。也於不久後看到百度百科還有我書籍的資訊,還真是蠻開心的,但不膨脹!
也祝大家,能在自己的路上堅持的走下去,長久的沉澱勢必會收穫到你想要的哪些旅途上的果實。