天天看點

bboss aop 實踐(2)屬性依賴注入

本系列檔案之二 介紹bboss aop架構中依賴注入(ioc)功能的使用方法

本系列文章适用于bboss-aop-1.0.5,下載下傳位址:

https://sourceforge.net/project/showfiles.php?group_id=238653&package_id=290546&release_id=658454

bboss aop提供兩種方式的依賴注入:

     屬性依賴注入

     建構函數依賴注入

另外還舉例說明了bboss aop架構是怎麼防止循環依賴注入的。下面逐一說明。

  1. 屬性依賴注入

        首先定義兩個元件接口群組件實作

            元件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 {