tiny-Spring【2】逐步step分析-新加入特性

  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.htmlspring

 

step-1-container-register-and-get

  這個版本的tiny-Spring很是簡單,本質就是一個靜態工廠類,傳入實例名稱與BeanDefinition鍵值對,其中BeanDefinition中存儲的就是實例自己數組

 

 

 

 

 

step-2-abstract-benfactory-and-do-bean-initilizing-in-it

  在上一步的基礎,經過反射機制進行實例操做,如今傳入的數據不是實例了,而是類對象app

  在原有基礎上添加了一個AbstractBeanFactory進行反射實例化框架

 

 

 

  

step-3-inject-bean-with-property

  在原有的基礎上經過反射機制中的Field字段進行屬性初始化yii

  專門添加了PropertyValue【存儲屬性名稱、屬性值】和PropertyValues【數組形式的PropertyValue】函數

 

 

 

 

 

step-4-config-beanfactory-with-xml

  在前一步的基礎上引入經過xml本地文件進行數據初始化,①初始化Java-io配置;②讀取xml本地文件;③經過以前已有的操做進行實例化已經屬性初始化

  增長:io、xml相關輔助函數

 

step-5-inject-bean-to-bean

   本質上與前一步同樣,只是在代碼中加入懶加載特性,對xml中讀取到的數據進行註冊,可是並無馬上進行實例化操做,在須要使用的時候才進行對象實例化。

 

step-6-invite-application-context

   將IOC的全部特性進行整合,將這些函數所有整合進行一個context包中之後就只須要調用一個簡單的函數便可,無需關注其餘的函數。

 

 

 

  

step-7-method-interceptor-by-jdk-dynamic-proxy

  這一步是IOC與AOP的分界點,本步驟使用的是靜態代理模式,直接傳入實例,進行代理方法調用 

 

 

 

step-8-invite-pointcut-and-aspectj

   首次引入AOP的相關概念,本步驟最重要的是驗證了切面這一律念

 

 

 

 

 

 

step-9-auto-create-aop-proxy

   將AOP的功能實現,使用的是系統自帶的動態代理函數庫

 

 

 

 到了這一步就有點混亂了,不過整理一下他們的邏輯就會發現他們使用動態代理以及切面match來實現AOP功能

 

step-10-invite-cglib-aopproxy-factory

  這個和step-9基本上同樣,不過這個是使用cglib實現的動態代理

 

 總結:

  經過黃大佬的tiny-Spring可以由淺入深的學習Spring的核心特性:IOC與AOP,底層實現其實也並不難,這些動態工廠、動態代理都是Java程序員必備的技能。

相關文章
相關標籤/搜索