讀懂Spring核心系列2(工廠模式)

2021-06-22 10:57:13 字數 2142 閱讀 7223

/**

* @author [email protected]

*/public inte***ce beanfactory

下面就是abstractbeanfactory類,它將實現上面的介面

/**

* @author [email protected]

*/public abstract class abstractbeanfactory implements beanfactory

@override

public void registerbeandefinition(string name, beandefinition beandefinition)

/*** 初始化bean

* @param beandefinition

* @return

*/protected abstract object docreatebean(beandefinition beandefinition);

}

應該注意到上面類中,docreatebean方法是抽象的,有待他的子類進行實現。這就是我們這一篇中標題所謂工廠方法的出處。我們將docreatebean延遲實現的原因是什麼?最後我們將分析原因。

下面的類繼承上面的

abstractbeanfactory,在這裡實現了docreatebean方法

/**

* @author [email protected]

*/public class autowirecapablebeanfactory extends abstractbeanfactory catch (instantiationexception e) catch (illegalacces***ception e)

return null;

}}

看過上面的三個類後,還有冰山的一角沒有揭開,就是

beandefinition ,這個在上面一直出現的類的具體實現

/**

* @author [email protected]

*/public class beandefinition

public void setbean(object bean)

public class getbeanclass()

public void setbeanclass(class beanclass)

public string getbeanclassname()

public void setbeanclassname(string beanclassname) catch (classnotfoundexception e)

} public object getbean()

}

到此,我們系列2的框架已經完成了,仔細看到這的同學已經可以使用上面的類實現bean的裝配和獲取。

首先:我們應該初始化

beandefinition ,因為它包裝了我們自己編寫,需要裝配的類。

其次:將beandefinition註冊到工廠中

最後:獲取bean,呼叫bean

下面是四個步驟的原始碼

public class beanfactorytest 

}

當然,helloworldservice這乙個作為使用框架的人編寫的bean也不能被漏掉

/**

* @author [email protected]

*/public class helloworldservice

}

最後補充的是

registerbeandefinition方法的第乙個引數,根據它來獲取bean,我們使用spring時,配置檔案中bean的id就是這樣的功能。

至於docreatebean需要延遲實現,是因為我們將有多種例項化bean的方式,spring就有什麼根據xml和註解等方式。當然,其中又細分許多種,像構造器,set方法等。我們根據設計模式,將不同的實現封裝到不同的子類中。

android 核心系列

編譯 1,需要jre1.6,64bit的機器。2,錯誤 this attribute must be localized 提示了錯誤 this attribute must be localized 這種問題一般情況是因為在res xml資料夾下的中 或者在res layout下的檔案中出現了沒有多...

linux核心系列(2) linux核心鍊錶

因為高超的設計理念,linux核心中的鍊錶被很多人津津樂道。實際上,鍊錶本身只是核心提供的一組結構體 巨集定義和函式的集合,與linux核心本身沒有直接關係。核心鍊錶的設計思路已經在另一篇部落格中寫了,有興趣的同學可以去看一下,這裡是鏈結。今天,我們來看一下真實核心鍊錶的基本操作過程。我們的目標是做...

JS核心系列 原型物件

在js中,每當建立乙個函式物件f1 時,該物件中都會內建一些屬性,其中包括prototype和 proto prototype即原型物件。每乙個建構函式都有乙個與之相關聯的物件,該物件稱之為原型物件。每個例項物件都能共享其原型物件上的屬性和方法。原型物件的作用主要用來實現屬性的繼承,讓例項物件能共享...