
作者:小傅哥
博客: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設計模式》出版了。不久以后我感受過圖書沖榜到銷量榜第一、在圖書館看到我的技術書、被國外的粉絲伙伴購買帶出國門,還看到有個女孩買來作為禮物送給他的男友。也於不久后看到百度百科還有我書籍的信息,還真是蠻開心的,但不膨脹!
也祝大家,能在自己的路上堅持的走下去,長久的沉淀勢必會收獲到你想要的哪些旅途上的果實。
