作為乙個使用輪子的程式設計師第一次寫了輪子,感覺還是滿興奮的。筆者在看很多專案的原始碼時,經常是看了忘,忘了看。在反思這個現象時,筆者認為:很多**固然很精巧,但因為讀者沒有設身處地考慮過實際的情景,對為什麼要這樣做沒有直接的感覺,導致印象不深刻。
還有乙個重要原因是,大部分框架的**在發展過程中都經過重新設計,這固然必要,但判空、處理異常以及複雜的父子關係等掩蓋了最初的思路,容易將讀者帶入到細節中。
最後,筆者前一陣在學習《how tomcat works》,對作者講述tomcat的方式深以為然,因此就萌生了自己實現乙個框架的想法。盡量少的判空、幾乎沒有異常處理(方法幾乎全部是throw exception),將最初的思路最直接的呈現在讀者面前,幫大家找到感覺:spring也是這樣一步步寫出來的。
重要的是三個map
框架中兩個品類的元件,beanfactory和beanprocessor全部是基於這個三個map在做處理,理解了這三個map,就理解了整個框架。
beanid2bean,beanid與bean在配置檔案(和註解)中資訊的對映
beanid2clazz,beanid與bean的class物件的對映
beanid2class,beanid與bean例項的對映
有了這三個map,beanfactory在執行getbean(beanid)
時,便可以根據beanid拿到其配置資訊,建立例項,並將建立的例項儲存到beanid2class中(以備下次使用)。
構建bean的藝術
書上講依賴注入
,aop
(其實還可以加上工廠bean
)是spring的兩個基本特性。其實是乙個,它們都是乙個關於如何構建bean的技術,beanfactory隱藏了建立bean的細節。
假設beanfactory是乙個真的工廠,它的產品是bean,該工廠主要有以下工藝來生產bean:
clazz.newinstance, 直接根據class物件建立
factorybean.getobject,向其它工廠」訂貨」
proxy.***x,由proxy組裝
自己動手寫bootloader
原始出處 作者資訊和本宣告。否則將追究法律責任。為了寫乙個bootloader讓板子跑起來,首先我們要知道bootloader是個什麼東東才行。簡單的說,bootloader就是乙個引導核心啟動的一段小 也就是說當啟動完核心之後,它的使命就已經結束。bootloader生命週期 初始化硬體 設定啟動...
自己動手寫CMS
簡易的cms外掛程式,可供借鑑或者擴充套件 流程 定義內容 分類與組織內容 儲存內容 操作控制內容 定義內容 制定目標 確定需要的內容型別 目標使用者定位 確定目標使用者需要何種技術 分類與組織內容 按內容所屬的邏輯層級關係來劃分 按內容的種類來劃分,比如video text audio等等 儲存內...
自己動手寫SpringMVC 四
本文將主要實現dispatcherservlet!之前已經分析過dispatcherservlet主要的任務,分為五個任務,我們從任務一開始開始實現!任務1 把專案中所有的bean掃瞄,進行維護 實現 如下 private void scanpackage string basepackage el...