本文總結前文的內容,將兩種方式整合在一起。
再次強調,要實現bean工廠功能,首先要將bean資訊載入到記憶體,由配置檔案或註解方式轉化為「以類的方式」儲存,並以map的形式組織起來(為方便查詢)。具體的說就是
public class beanfactory catch (exception e)
} // getbean時,先嘗試從xml中獲取一下,如果沒有,再嘗試從註解資訊中獲取一下
public object getbean(string beanid) throws exception
obj = getbeanfromxml(beanid);
if(obj == null)
if (obj != null)
return obj;
}}
**中的loadxml,loadannotation,getbeanfromxml,getbeanfromannotation可從前文的load和getbean方法中得到。
前文中,掃瞄使用註解類的包的包名是寫死在**中,此處將其寫在配置檔案中。為此,要調整一些標籤類(省略get和set方法)。
// 新增scan類
public class scan
調整beans類
public class beans
// beans.xml配置檔案
<?xml version="1.0" encoding="utf-8"?>
在示例中,beana使用了xml檔案方式,beanb使用了註解方式,beanfactory正常工作啦。但旋即,筆者注意到乙個問題,粒度。目前的粒度,是以bean為單位,乙個bean要麼全註解方式,要麼全配置檔案方式。但經常使用spring的人,會知道有一種情況:在配置檔案中宣告bean,然後在類中使用@autowire
注入屬性,因此我們要調整getbean方法。
public object getbean(string beanid) throws exception
// 此處,不再一判空就返回
obj = getbeanfromxml(beanid);
obj = getbeanfromannotation(beanid);
return obj;
}public object getbeanfromannotation(string beanid) throws exception
object obj = beanid2class.get(beanid);
// getbeanfromxml沒有構建該bean時,建立bean。否則,復用bean。
if (obj == null)
// 省略前文中getbean**
}
到這裡,我們就實現了spring的基本功能之一,依賴注入。其實主要就是兩個步驟:
將元資訊從配置檔案和註解中載入到類中
根據元資訊,使用反射構建bean
當然,按照**重構的邏輯,beanfactory的很多方法,可以獨立為乙個元件,這樣beanfactory就不會很臃腫。
在下文中,我們將提供對bean生命週期的管理。
(四)整合學習
2.2.1 分類 二分類為例,輸出 1 1 2.2.2 回歸 r2回歸為例 2.2.3 正則化booster 弱學習器,常用gbtree eta learning rate min child weight 預設1 子節點的權重閾值。它刻畫的是 對於乙個葉子節點,當對它採取劃分之後,它的所有子節點的...
學習筆記(四) 整合學習
概念 整合學習 多分類器系統 基於委員會的學習 通過構建並結合多個學習器完成學習任務。圖1 先產生一組個體學習器,再利用某種策略將他們結合起來。分類1 根據個體學習器是否為同種型別 分類2 根據序列 並行 好而不同 個體學習器有一定的準確性並且學習器間具有差異 整合學習往往可以得到比單一學習器顯著優...
ABP架構學習系列四 整合Dapper
修改zmblog.infrastructure的zmblogdatamodule 如下 namespace zmblog.entityframework public override void initialize 和ef一樣,需要配置對映關係 public public ps 如果同時使用ef,...