tiny-Spring是黃億華大佬本身寫的一個集合IOC和AOP於一身的一種輕量級【教學用】Spring框架,它的github庫地址爲:https://github.com/code4craft/tiny-springhtml
這個輕量級框架一共有10個演進步驟,從第一步到第十步,咱們能夠經過查看它的測試用例以及源碼內容的變化,逐步學習Spring的底層實現方式【那些SpringBoot、Spring以及其餘衍生框架本質也是使用了這些方法實現,只是在其基礎上添加了註解、新的簡易化特性、更強的功能等等】。git
注意:程序員
①這裏面的逐步展現的框圖,核心功能都是在前一步的基礎上進行擴展而來的,至關於打補丁,前幾步中的類也會有一些變化來適應當前的功能,可是變化不是特別大。github
②能夠直接在本地git clone目錄下使用語句:git checkout step-1-【加tab鍵,回車到達指定的step代碼版本】,不會的本身學一下:https://www.yiibai.com/git/git_checkout.html
spring
這個版本的tiny-Spring很是簡單,本質就是一個靜態工廠類,傳入實例名稱與BeanDefinition鍵值對,其中BeanDefinition中存儲的就是實例自己數組
在上一步的基礎,經過反射機制進行實例操做,如今傳入的數據不是實例了,而是類對象app
在原有基礎上添加了一個AbstractBeanFactory進行反射實例化框架
在原有的基礎上經過反射機制中的Field字段進行屬性初始化yii
專門添加了PropertyValue【存儲屬性名稱、屬性值】和PropertyValues【數組形式的PropertyValue】函數
在前一步的基礎上引入經過xml本地文件進行數據初始化,①初始化Java-io配置;②讀取xml本地文件;③經過以前已有的操做進行實例化已經屬性初始化
增長:io、xml相關輔助函數
本質上與前一步同樣,只是在代碼中加入懶加載特性,對xml中讀取到的數據進行註冊,可是並無馬上進行實例化操做,在須要使用的時候才進行對象實例化。
將IOC的全部特性進行整合,將這些函數所有整合進行一個context包中之後就只須要調用一個簡單的函數便可,無需關注其餘的函數。
這一步是IOC與AOP的分界點,本步驟使用的是靜態代理模式,直接傳入實例,進行代理方法調用
首次引入AOP的相關概念,本步驟最重要的是驗證了切面這一律念
將AOP的功能實現,使用的是系統自帶的動態代理函數庫
到了這一步就有點混亂了,不過整理一下他們的邏輯就會發現他們使用動態代理以及切面match來實現AOP功能
這個和step-9基本上同樣,不過這個是使用cglib實現的動態代理
經過黃大佬的tiny-Spring可以由淺入深的學習Spring的核心特性:IOC與AOP,底層實現其實也並不難,這些動態工廠、動態代理都是Java程序員必備的技能。