嘗試模擬實現IOC(一)

2021-08-29 18:52:43 字數 1106 閱讀 5511

大體思路:

首先需要準備乙個包掃瞄工具,用來掃瞄需要建立bean的類。

準備註解,暫時使用component、bean、autowired註解,後續還會增加。

建立乙個beanfactory,對外提供getbean(calss<?> class)方法。

getbean返回的是**物件(為之後實現***模擬aop做準備),則還需要建立乙個proxybeanfactory,對外提供getmproxy(string classname)方法,內含有靜態的beannamemap以及beanmap。

getmproxy返回的是mproxy型別,則還需要建立乙個mproxy類,其中包含了**、物件、是否注入標誌三個成員變數。

還需要乙個proxyfactory用來建立mproxy。

執行思路:

首先進行包掃瞄。掃瞄到某個類,判斷是否有component註解,有則取得component註解的name屬性(可以不寫name屬),使用proxybeanfactory建立mproxy。

接著繼續取得該類的名稱以及隊友的mproxy中的object,先判斷該類的方法中是否含有帶bean註解的方法,有則取得bean註解以及其name屬性,取得方法的引數,通過反射執行該方法。

解決方案:

首先將引數個數為0的、帶著bean註解的方法通過反射得到的結果得到後建立mproxy。

將引數個數不為0方法的先放入事先準備好的list裡面。

等待包掃瞄完成後,再遍歷list通過反射建立mproxy。

所有的mproxy建立完成之後,並未完成成員的注入。那麼什麼時候進行注入呢?

我的選擇是在使用者呼叫getbean時候再去注入相關的成員(帶有autowired註解的成員)。

eg:classa中有成員classb,classb中有classc,classc中有classa。

思路:用乙個可以判斷是否注入的標誌。

對於這種情況我們可以在getbean時候(實際上是取mproxy),首先判斷該類是否完成注入,若沒有注入則跳到注入方法去注入。注入方法中,將這個類標誌為已注入,

然後取得成員,判斷每個成員是否帶有注入標誌的註解,如果有則取這個bean(取mproxy),重複1。

給成員注入相應的bean(mproxy中的proxy)。

模擬實現Spring IOC

通過在類上標註 registration 註冊進容器,injection從容器注入物件 容器類 public class springcontainer else bean.setbeanclass c mappropsmap new hashmap 處理注入屬性 field props c.get...

模擬實現strcmp

函式簡介 原型 int strcmp const char s1,const char s2 所在標頭檔案 string.h 功能 比較字串s1和s2。一般形式 strcmp 字串1,字串2 說明 當s1注意不是 1 當s1 s2時,返回值 0 當s1 s2時,返回正數 注意不是1 如下 int m...

模擬實現strncat

模擬實現strncat 在系統庫函式中,存在strncat這個函式,它用於字串的追加,就是在乙個字串後面再追加乙個字串,它的函式原型為 char strncat char strdest,const char strsource,size t count 在其中,strdest為目標字串,strso...