本專案想法與程式碼來自於開源專案DerekYRC/mini-spring、code4craft/tiny-spring 經過本人學習、擴展、補充,並撰寫文章總結經驗,分享給廣大讀者,一起學習Spring 原始碼。非常感謝開源專案貢獻者,讀者也可以一起學習,不同視野下的學習經驗。
開源專案及優秀書籍;
小傅哥,第一線互聯網Java 工程師、架構師,開發過交易、行銷類項目,實現過營運、活動類項目,設計過中間件,組織過系統重構,編寫過技術專利。不僅從事業務系統的開發工作,也常做一些字節碼插樁類的設計和實現,對架構的設計和落地有豐富的經驗。在熱衷於Java語言的同時,也喜歡研究中繼器、I/O闆卡、C#和PHP,是個技術活躍的折騰者。 ✏️ 蟲洞· 科技棧,博主, 《重學Java設計模式》圖書作者
新增微信:fustack | 關注 |
知識星球:碼農會鎖?
(学习套路&源码使用)
issue
同好交流、共同進步本倉庫以Spring 原始碼學習為目的,透過手寫簡化版Spring 框架,了解Spring 核心原理。 Go -> 詳細介紹
在手寫的過程中會簡化Spring 原始碼,摘取整體框架中的核心邏輯,簡化程式碼實作過程,保留核心功能,例如:IOC、AOP、Bean生命週期、上下文、作用域、資源處理等內容實作。
小傅哥
,之所以開始擼Spring源碼,主要就是因為在編寫《面經手冊》時,涉及到的Spring源碼都會寫很多的文字描述、繪製冗長的流程圖稿、做不少的內容鋪墊,但對於新人來說想直接學習這部分內容仍是非常困難的,那麼現在為了讓我以及更多的伙伴能有一個學習的抓手
,我們來一起研究研究什麼是快樂星球!
此專欄為實戰編碼類資料,在學習的過程中需要結合文中每個章節裡,要解決的目標,進行的思路設計,帶入到編碼實操過程。在學習程式設計的同時也最好理解關於這部分內容為什麼這樣的實現,它用到了哪樣的設計模式,採用了什麼手段做了什麼樣的職責分離。只有透過這樣的學習才能更好的理解和掌握Spring 原始碼的實現過程,也能幫助你在以後的深入學習和實踐應用的過程中打下一個紮實的基礎。
另外這篇專欄內容的學習上結合了設計模式,下對應了SpringBoot 中間件設計和開發,所以讀者在學習的過程中如果遇到不理解的設計模式可以翻閱相應的資料,在學習完Spring 後還可以結合中間件的內容進行練習。
原始碼:此專欄涉及的源碼已經全部整合到當前工程下,可以與章節中對應的案例源碼一一匹配上。大家拿到整套工程可以直接運行,也可以把每個章節對應的源碼工程單獨打開運行。
如果你在學習的過程中遇到什麼問題,包括:不能運行、優化意見、文字錯誤等任何問題都可以提交issue,也可以聯絡作者:小傅哥
的微信, fustack
在專欄的內容撰寫中,每個章節都提供了清晰的設計圖稿和對應的類別圖,所以學習過程中一定不要只是在乎程式碼是怎麼寫的,更重要的是理解這些設計的內容是如何來的,在這個過程中不斷的實現Bean生命週期的全部核心內容,如下圖:
Spring Bean 的生命週期 |
---|
难度【★☆☆☆☆】第01 章:开篇介绍,我要带你撸Spring 啦!
难度【★☆☆☆☆】第02 章:小试牛刀,实现一个简单的Bean容器
难度【★☆☆☆☆】第03 章:初显身手,运用设计模式,实现Bean 的定义、注册、获取
难度【★★☆☆☆】第04 章:崭露头角,基于Cglib实现含构造函数的类实例化策略
难度【★★☆☆☆】第05 章:一鸣惊人,为Bean对象注入属性和依赖Bean的功能实现
难度【★★☆☆☆】第06 章:气吞山河,设计与实现资源加载器,从Spring.xml解析和注册Bean对象
难度【★★★★☆】第07 章:所向披靡,实现应用上下文,自动识别、资源加载、扩展机制
难度【★★★☆☆】第08 章:龙行有风,向虚拟机注册钩子,实现Bean对象的初始化和销毁方法
难度【★★★☆☆】第09 章:虎行有雨,定义标记类型Aware接口,实现感知容器对象
难度【★★★☆☆】第10 章:横刀跃马,关于Bean对象作用域以及FactoryBean的实现和使用
难度【★★★★☆】第11 章:更上层楼,基于观察者实现,容器事件和事件监听器
难度【★★★★☆】第12 章:炉火纯青,基于JDK和Cglib动态代理,实现AOP核心功能
难度【★★★★★】第13 章:行云流水,把AOP动态代理,融入到Bean的生命周期
难度【★★★☆☆】第14 章:笑傲江湖,通过注解配置和包自动扫描的方式完成Bean对象的注册
难度【★★★☆☆】第15 章:万人之敌,通过注解给属性注入配置和Bean对象
本書是作者
小傅哥
,投入50天時間,從網路實際業務開發中抽離出,交易、行銷、秒殺、中間件、源碼等22個真實業務場景,編寫了18萬字271頁的實戰型Java程式資料。如果書中含有不易理解的內容,一定是作者在編寫的過程中缺少必要的描述和嚴格的校準,感謝把你的意見或者疑問提交給我,也歡迎與我多一些交互,互相進步共同成長。
全網唯一一次手把手教你造輪子、寫中間件,因為這樣的技術離P7最近、離架構師最近、離高薪資最近!小冊16個中間件實現,包括測試工程等共30個代碼庫,每一章節都會對應有一個中間件的設計和實現,為了便於讀者快速有效的學習小冊中的技術內容,在小冊的每一章節中都涵蓋;開篇引導、需求背景、方案設計、技術實現、測試驗證和文末總結。
全書共5 章29 節,417頁11.5萬字,耗時4 個月完成。涵蓋資料結構、演算法邏輯、並發程式設計、JVM以及履歷和網路大廠面試等內容。但此書並不是單純的面試題,也不是內卷八股文。而是從一個單純的和程式設計師有關的數學知識點開始,深入講解Java 的核心技術。而且每一章節都配有實踐驗證的源碼,可以對照著一起擼才更有感覺!
讓人怪不好意思的,說是出書有點膨脹,畢竟這不是走出版社的流程,選題、組稿、編著、審讀、加工到出版發行。但全書共107頁,11萬7千字,20個章節涵蓋三個字節碼框架(ASM、Javassist、Byte-budy)和JavaAgent使用並附帶整套案例源碼!
問題回饋:
加群交流
本群的宗旨是提供大家一個良好的技術學習交流平台,所以杜絕一切廣告!由於微信群人滿100 之後無法加入,請掃描下方二維碼先加入作者「小傅哥」 微信(fustack),備註: Spring学习加群
。
公眾號(bugstack蟲洞棧)
沉澱、分享、成長,專注於原創專題案例,以最容易學習程式設計的方式分享知識,讓自己和他人都能有所收穫。目前已完成的專題有;Netty4.x實戰專題案例、用Java實現JVM、基於JavaAgent的全鏈路監控、手寫RPC框架、DDD專題案例、源碼分析等。
在資料整理的過程中,發現了兩個非常優秀的手寫Spring 框架源碼,tiny-spring、mini-spring,這兩個簡化版的Spring框架都實現了一個非常易懂、易學、易上手的源碼教程,如果你已經有了一定的基礎,那麼可以直接閱讀原始碼學習。地址: