本系列檔案之二 介紹bboss aop架構中依賴注入(ioc)功能的使用方法
本系列文章适用于bboss-aop-1.0.5,下載下傳位址:
https://sourceforge.net/project/showfiles.php?group_id=238653&package_id=290546&release_id=658454bboss aop提供兩種方式的依賴注入:
屬性依賴注入
建構函數依賴注入
另外還舉例說明了bboss aop架構是怎麼防止循環依賴注入的。下面逐一說明。
-
屬性依賴注入
首先定義兩個元件接口群組件實作
元件com.chinacreator.spi.reference.A群組件接口com.chinacreator.spi.reference.AI
元件com.chinacreator.spi.reference.B群組件接口com.chinacreator.spi.reference.BI
元件A中引用了元件接口BI的一個引用,另外A還引用了一個普通的java對象com.chinacreator.spi.reference.Test的變量test。
我們通過bboss aop架構來管理元件A群組件B,并且通過屬性注入的方式初始化A對BI的引用屬性,初始化Test變量。
假設上述類接口都已經定義好,元件也已經實作。
我們直接來看看怎麼來編寫bboss aop配置檔案:
<?xml version="1.0" encoding='gb2312'?>
<manager-config>
<manager id="a" singlable="false">
<!--
基于資料庫的使用者管理實作
屬性描述:
type:代表資料存儲的類型,例如DB,LDAP,ACTIVEDIRECTORY等等
class:實作類代碼
-->
<provider type="DB"
class="com.chinacreator.spi.reference.A" />
<reference fieldname="b" refid="b" />
<reference fieldname="test" class="com.chinacreator.spi.reference.Test"/>
</manager>
<manager id="b" singlable="false">
-->
<provider type="DB" class="com.chinacreator.spi.reference.B" />
</manager-config>
可以将上述檔案存儲在一個名叫manager-provider-reference.xml檔案中放在工程的src目錄下,同時将該檔案通過manager-provider.xml主檔案導入即可,manager-provider.xml,檔案添加以下行即可:
<managerimport file="manager-provider-reference.xml" />
配置檔案寫好後就可以通過com.chinacreator.spi.BaseSPIManager元件來擷取AI的執行個體對象了:
try {
AI a = (AI)BaseSPIManager.getProvider("a");
System.out.println("a:" + a);
System.out.println("a:" +a.getB());
System.out.println("a.getTest():" +a.getTest());
} catch (SPIException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
附帶幾個類的定義:
package com.chinacreator.spi.reference;
public class A implements AI{
private BI b;
private Test test;
public void setB(BI b) {
this.b = b;
}
public BI getB() {
return b;
public void setTest(Test test) {
this.test = test;
public Test getTest() {
return this.test;
}
public interface AI {
public void setB(BI b) ;
public BI getB() ;
public void setTest(Test test);
public Test getTest();
public class B implements BI{
private CI c;
public void setC(CI c) {
this.c = c;
public CI getC() {
return c;
public interface BI {
public void setC(CI c);
public CI getC() ;
public class Test {