加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

bboss aop 实践(2)属性依赖注入

发布时间:2020-12-14 05:52:24 所属栏目:百科 来源:网络整理
导读:?本系列文件之二 介绍bboss aop框架中依赖注入(ioc)功能的使用方法 本系列文章适用于bboss-aop-1.0.5,下载地址: https://sourceforge.net/project/showfiles.php?group_id=238653package_id=290546release_id=658454 bboss aop提供两种方式的依赖注入: ??

?本系列文件之二 介绍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">
??????????????? <!--
??????????????????????? 基于数据库的用户管理实现
??????????????????????? 属性描述:
??????????????????????? type:代表数据存储的类型,ACTIVEDIRECTORY等等
??????????????????????? class:实现类代码
??????????????????????????????????????? -->
??????????????? <provider type="DB"???????????????????????? class="com.chinacreator.spi.reference.B" />
???????????????
??????? </manager>
???????
</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;
??????? }

}


package com.chinacreator.spi.reference;

public interface AI {
??????? public void setB(BI b) ;

??????? public BI getB() ;
??????? public void setTest(Test test);
??????? public Test getTest();

}


package com.chinacreator.spi.reference;

public class B? implements BI{
??????? private CI c;

??????? public void setC(CI c) {
??????????????? this.c = c;
??????? }

??????? public CI getC() {
??????????????? return c;
??????? }

}

package com.chinacreator.spi.reference;

public interface BI {
??????? public void setC(CI c);

??????? public CI getC() ;

}


package com.chinacreator.spi.reference;

public class Test {

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读