- 浏览: 693796 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (364)
- quick start (57)
- bboss aop (43)
- bboss mvc (48)
- bboss persistent (96)
- bboss taglib (30)
- bboss event (10)
- bbossgroups (52)
- bboss (32)
- bboss会话共享 (17)
- bboss rpc (7)
- bboss 国际化 (5)
- bboss 序列化 (9)
- bboss cxf webservice (8)
- bboss hessian (3)
- bboss 安全认证SSO (15)
- bboss 工作流 (6)
- 平台 (18)
- bboss quartz (3)
- 杂谈 (5)
- 大数据 (1)
- bboss elastic (24)
- bboss http (1)
- bboss kafka (1)
- Elasticsearch Scroll和Slice Scroll查询API使用案例 (1)
最新评论
-
qianhao123:
...
采用gradle构建和发布bboss方法介绍 -
qianhao123:
[img][/img]
采用gradle构建和发布bboss方法介绍 -
yin_bp:
欢迎大家参与working
高性能elasticsearch ORM开发库使用介绍 -
qq641879434:
万分感谢
bboss 持久层sql xml配置文件编写和加载方法介绍 -
yin_bp:
qq641879434 写道怎么设置配置文件 可以查看执行的S ...
bboss 持久层sql xml配置文件编写和加载方法介绍
bboss aop 3.5及后续版本中改进的ioc依赖注入功能介绍。
bboss依赖注入支持复杂关系的依赖注入:组件直接自引用(a->a),组件间接自引用(a->b->a),组件间循环依赖引用(a->b->c->d->b)
举一个简单的自引用的列子:
<property name="test" class="org.frameworkset.spi.remote.RPCTest" f:selfvar="attr:test"/>
一、新的ioc功能特点
改进后的ioc依赖注入机制支持完整的循环依赖注入功能,并且支持任何层级的对象及对象属性引用,为了对照refid和直接配置的组件的区别,我们先看一个普通组件的配置方法:
refid属性值的格式实例如下:
<property name="test2" refid="attr:test1->test2" />
在介绍refid属性的各种引用格式及含义之前,我们先看一个完整的实例:
refid属性的所有格式及含义说明如下:
refid格式 含义
1.attr:serviceid 根据服务标识引用容器服务组件
2.attr:serviceid[0] 根据服务标识及数组下标引用容器服务组件对应的下标为0对应的元素(容器服务组件类型为list,set,array三种类型)
3.attr:serviceid[key] 根据服务标识及map key引用容器服务组件对应的索引为key对应的元素(容器服务组件类型为map类型)
4.attr:serviceid{0} 根据服务标识及构造函数参数位置下标引用容器服务组件对应的下标为0对应的构造函数参数(容器服务组件为构造函数注入)
5.attr:serviceid->innerattributename 根据服务标识及服务组件的属性名称引用容器服务组件属性值
6.attr:serviceid->innerattributename[0] 根据服务标识及服务属性名称以及属性数组下标引用容器服务组件属性中对应的下标为0对应的元素(容器服务组件类型为list,set,array三种类型)
7.attr:serviceid->innerattributename[key] 根据服务标识及服务属性名称以及map key引用容器服务组件属性对应的索引为key对应的元素(容器服务组件类型为map类型)
8.attr:serviceid->innerattributename{0} 根据服务标识及服务属性名称对应属性的造函数参数位置下标引用容器服务组件对应的下标为0对应的构造函数参数(容器服务组件为构造函数注入)
其中属性的引用是不限制层级的。
下面举例来说明上述每种情况的使用方法。
二、引用使用详解
通过在xml配置文件中配置一个的复杂对象Test1组件来说明IOC的循环依赖功能以及局部属性引用功能。
涉及的三个对象Test1、Test2、Test3定义如下:
Test1对象:
Test2对象:
Test3对象:
看以看出几个对象之间的引用是错综复杂的,基于此我们再来看看test1组件的配置:包括了Test1所有属性的配置,每个属性的配置都包含了详细的含义说明,这些属性的配置基本涵盖了bboss ioc依赖注入的所有功能特性,本文中暂不介绍针对构造函数参数的引用功能:
案例一
下面看看如何加载上述配置并获取test1对象,然后看看xml-bean相互转换的过程:
再看看一个包含二维元素引用的示例配置:
test1中的属性innerelement引用了list属性testlist的第二个元素对应的数组中的第一个数据:
<property name="innerelement" refid="attr:test1->testlist[1][0]"/>
testlist属性的定义如下:
<property refid="attr:test1->testarraybasic"/>
testarraybasic属性的定义如下:
bboss依赖注入支持复杂关系的依赖注入:组件直接自引用(a->a),组件间接自引用(a->b->a),组件间循环依赖引用(a->b->c->d->b)
举一个简单的自引用的列子:
<property name="test" class="org.frameworkset.spi.remote.RPCTest" f:selfvar="attr:test"/>
一、新的ioc功能特点
改进后的ioc依赖注入机制支持完整的循环依赖注入功能,并且支持任何层级的对象及对象属性引用,为了对照refid和直接配置的组件的区别,我们先看一个普通组件的配置方法:
<properties> <property name="rpc.test" class="org.frameworkset.spi.remote.RPCTest"/> </properties>
refid属性值的格式实例如下:
<property name="test2" refid="attr:test1->test2" />
在介绍refid属性的各种引用格式及含义之前,我们先看一个完整的实例:
<?xml version="1.0" encoding="gbk"?> <properties> <property name="test1" class="org.frameworkset.soa.xblink.Test1"> <property name="test2" class="org.frameworkset.soa.xblink.Test2"> <!--内部组件test2的test1属性引用外层组件test1--> <property name="test1" refid="attr:test1" /> </property> <property name="test3" class="org.frameworkset.soa.xblink.Test3"> <!--内部组件test3的test2属性引用外部组件test1的属性test2--> <property name="test2" refid="attr:test1->test2" /> </property> <!--test4属性引用外部组件test1,这是一个对象自我引用配置方式--> <property name="test4" refid="attr:test1"/> </property> </properties>
refid属性的所有格式及含义说明如下:
refid格式 含义
1.attr:serviceid 根据服务标识引用容器服务组件
2.attr:serviceid[0] 根据服务标识及数组下标引用容器服务组件对应的下标为0对应的元素(容器服务组件类型为list,set,array三种类型)
3.attr:serviceid[key] 根据服务标识及map key引用容器服务组件对应的索引为key对应的元素(容器服务组件类型为map类型)
4.attr:serviceid{0} 根据服务标识及构造函数参数位置下标引用容器服务组件对应的下标为0对应的构造函数参数(容器服务组件为构造函数注入)
5.attr:serviceid->innerattributename 根据服务标识及服务组件的属性名称引用容器服务组件属性值
6.attr:serviceid->innerattributename[0] 根据服务标识及服务属性名称以及属性数组下标引用容器服务组件属性中对应的下标为0对应的元素(容器服务组件类型为list,set,array三种类型)
7.attr:serviceid->innerattributename[key] 根据服务标识及服务属性名称以及map key引用容器服务组件属性对应的索引为key对应的元素(容器服务组件类型为map类型)
8.attr:serviceid->innerattributename{0} 根据服务标识及服务属性名称对应属性的造函数参数位置下标引用容器服务组件对应的下标为0对应的构造函数参数(容器服务组件为构造函数注入)
其中属性的引用是不限制层级的。
下面举例来说明上述每种情况的使用方法。
二、引用使用详解
通过在xml配置文件中配置一个的复杂对象Test1组件来说明IOC的循环依赖功能以及局部属性引用功能。
涉及的三个对象Test1、Test2、Test3定义如下:
Test1对象:
package org.frameworkset.soa.xblink; import java.util.List; import java.util.Map; public class Test1 { Test2 test2; Test3 test3; Test1 test4; Test1 test5; Test2 test6; Test2 test7; Test2 test8; Test1 test9; Test1 test10; Test1 test11; Test2 test12; Map testmap; List testlist; Test1[] testarray; }
Test2对象:
package org.frameworkset.soa.xblink; public class Test2 { Test1 test1; Test3 test3; }
Test3对象:
package org.frameworkset.soa.xblink; public class Test3 implements java.io.Serializable{ Test2 test2; }
看以看出几个对象之间的引用是错综复杂的,基于此我们再来看看test1组件的配置:包括了Test1所有属性的配置,每个属性的配置都包含了详细的含义说明,这些属性的配置基本涵盖了bboss ioc依赖注入的所有功能特性,本文中暂不介绍针对构造函数参数的引用功能:
案例一
<?xml version="1.0" encoding="gbk"?> <properties> <!-- 通过test1对应的复杂对象Test1来说明IOC的循环依赖功能以及局部属性引用功能 --> <property name="test1" class="org.frameworkset.soa.xblink.Test1"> <property name="test2" class="org.frameworkset.soa.xblink.Test2"> <!--内部组件test2的test1属性引用外层组件test1--> <property name="test1" refid="attr:test1" /> <!--内部组件test2的test3属性引用外层组件test1的test3属性--> <property name="test3" refid="attr:test1->test3" /> </property> <!--内部组件test3的test2属性引用外层组件test1的test2属性--> <property name="test3" class="org.frameworkset.soa.xblink.Test3" f:test2="attr:test1->test2"/> <!--test4属性直接引用外层组件test1--> <property name="test4" refid="attr:test1"/> <property name="testmap" > <map componentType="bean"> <!--Map类型属性testmap的test4索引对应的值是对外层组件test1引用--> <property name="test4" refid="attr:test1"/> </map> </property> <property name="testlist" > <list componentType="bean"> <!--List类型属性testlist的第一个值是对外层组件test1引用--> <property refid="attr:test1"/> </list> </property> <property name="testarray" > <array componentType="org.frameworkset.soa.xblink.Test1"> <!--数组类型属性testlist的第一个值是对外层组件test1引用--> <property refid="attr:test1"/> </array> </property> <!--test5属性直接引用外层test1组件的属性test4--> <property name="test5" refid="attr:test1->test4"/> <!--test6属性直接引用外层test1组件的数组属性testarray的第一个元素对象的test2属性--> <property name="test6" refid="attr:test1->testarray[0]->test2"/> <!--test7属性直接引用外层test1组件的List属性testlist的第一个元素对象的test2属性--> <property name="test7" refid="attr:test1->testlist[0]->test2"/> <!--test8属性直接引用外层test1组件的Map属性testmap的key为test4对应的值对象的test2属性--> <property name="test8" refid="attr:test1->testmap[test4]->test2"/> <!--test9属性直接引用外层test1组件的数组属性testarray的第一个元素对象--> <property name="test9" refid="attr:test1->testarray[0]"/> <!--test10属性直接引用外层test1组件的List属性testlist的第一个元素对象--> <property name="test10" refid="attr:test1->testlist[0]"/> <!--test11属性直接引用外层test1组件的Map属性testmap的key为test4对应的值对象--> <property name="test11" refid="attr:test1->testmap[test4]"/> <!--test12属性直接引用外层test1组件的属性test3对象中的test2属性--> <property name="test12" refid="attr:test1->test3->test2"/> </property> </properties>
下面看看如何加载上述配置并获取test1对象,然后看看xml-bean相互转换的过程:
//加载配置文件,构建一个组件容器对象 BaseApplicationContext context = DefaultApplicationContext.getApplicationContext("org/frameworkset/soa/xblink/testcontainref.xml"); //获取组件test1 Test1 test1 = context.getTBeanObject("test1", Test1.class); //重新将组件序列化为xml串 String ss = ObjectSerializable.toXML(test1); //将xml串ss转换为对象test_ Test1 test1_ = (Test1)ObjectSerializable.toBean(ss,Test1.class);
再看看一个包含二维元素引用的示例配置:
<?xml version="1.0" encoding="gbk"?> <properties> <!-- 通过test1对应的复杂对象Test1来说明IOC的循环依赖功能以及局部属性引用功能 --> <property name="test1" class="org.frameworkset.soa.xblink.Test1"> <property name="test2" class="org.frameworkset.soa.xblink.Test2"> <!--内部组件test2的test1属性引用外层组件test1--> <property name="test1" refid="attr:test1" /> <!--内部组件test2的test3属性引用外层组件test1的test3属性--> <property name="test3" refid="attr:test1->test3" /> </property> <!--内部组件test3的test2属性引用外层组件test1的test2属性--> <property name="test3" class="org.frameworkset.soa.xblink.Test3" f:test2="attr:test1->test2"/> <!--test4属性直接引用外层组件test1--> <property name="test4" refid="attr:test1"/> <property name="testmap" > <map componentType="bean"> <!--Map类型属性testmap的test4索引对应的值是对外层组件test1引用--> <property name="test4" refid="attr:test1"/> </map> </property> <property name="testlist" > <list componentType="bean"> <!--List类型属性testlist的第一个值是对外层组件test1引用--> <property refid="attr:test1"/> <!--List类型属性testlist的第二个值是对外层组件test1的数组属性testarraybasic的引用--> <property refid="attr:test1->testarraybasic"/> </list> </property> <property name="testarray" > <array componentType="org.frameworkset.soa.xblink.Test1"> <!--数组类型属性testlist的第一个值是对外层组件test1引用--> <property refid="attr:test1"/> <!--数组类型属性testlist的第二个值是对外层组件test1的数组属性testarraybasic的第二个值得引用--> <property refid="attr:test1->testarraybasic[1]"/> </array> </property> <!--数组类型属性testarraybasic用来验证属性多维引用功能--> <property name="testarraybasic" > <array componentType="org.frameworkset.soa.xblink.Test1"> <property class="org.frameworkset.soa.xblink.Test1"/> <property class="org.frameworkset.soa.xblink.Test1"/> <property class="org.frameworkset.soa.xblink.Test1"/> <property class="org.frameworkset.soa.xblink.Test1"/> </array> </property> <!--属性innerelement用来验证属性二维引用功能--> <property name="innerelement" refid="attr:test1->testlist[1][0]"/> <!--test5属性直接引用外层test1组件的属性test4--> <property name="test5" refid="attr:test1->test4"/> <!--test6属性直接引用外层test1组件的数组属性testarray的第一个元素对象的test2属性--> <property name="test6" refid="attr:test1->testarray[0]->test2"/> <!--test7属性直接引用外层test1组件的List属性testlist的第一个元素对象的test2属性--> <property name="test7" refid="attr:test1->testlist[0]->test2"/> <!--test8属性直接引用外层test1组件的Map属性testmap的key为test4对应的值对象的test2属性--> <property name="test8" refid="attr:test1->testmap[test4]->test2"/> <!--test9属性直接引用外层test1组件的数组属性testarray的第一个元素对象--> <property name="test9" refid="attr:test1->testarray[0]"/> <!--test10属性直接引用外层test1组件的List属性testlist的第一个元素对象--> <property name="test10" refid="attr:test1->testlist[0]"/> <!--test11属性直接引用外层test1组件的Map属性testmap的key为test4对应的值对象--> <property name="test11" refid="attr:test1->testmap[test4]"/> <!--test12属性直接引用外层test1组件的属性test3对象中的test2属性--> <property name="test12" refid="attr:test1->test3->test2"/> </property> </properties>
test1中的属性innerelement引用了list属性testlist的第二个元素对应的数组中的第一个数据:
<property name="innerelement" refid="attr:test1->testlist[1][0]"/>
testlist属性的定义如下:
<property name="testlist" > <list componentType="bean"> <!--List类型属性testlist的第一个值是对外层组件test1引用--> <property refid="attr:test1"/> <!--List类型属性testlist的第二个值是对外层组件test1的数组属性testarraybasic的引用--> <property refid="attr:test1->testarraybasic"/> </list> </property>其中的第二个元素,又是对test1中的一个数组属性testarraybasic的引用:
<property refid="attr:test1->testarraybasic"/>
testarraybasic属性的定义如下:
<property name="testarraybasic" > <array componentType="org.frameworkset.soa.xblink.Test1"> <property class="org.frameworkset.soa.xblink.Test1"/> <property class="org.frameworkset.soa.xblink.Test1"/> <property class="org.frameworkset.soa.xblink.Test1"/> <property class="org.frameworkset.soa.xblink.Test1"/> </array> </property>
发表评论
-
bboss ioc快速入门教程
2017-08-13 11:28 1273bboss是一个非常不错的ioc框架,功能类似于spr ... -
bboss ioc配置文件中使用外部属性文件介绍
2016-09-20 11:35 1141bboss ioc配置文件中使用外部属性文件介绍 与spri ... -
bboss与spring中配置和引用bboss数据源和bboss dao组件方法说明
2016-08-10 16:04 914首先在项目中导入bboss 持久层包: maven坐标 & ... -
bboss ioc提供的组件初始化工具类介绍
2016-03-18 16:17 734bboss ioc提供的组件初始化工具类介绍 bboss i ... -
扩展bboss ioc语法实现自定义的ioc依赖注入功能
2015-01-20 23:08 1324bboss ioc配置语法简洁而严谨,提供了强大的依赖注入功能 ... -
bboss开发、模块工程目录结构及功能说明
2014-10-15 19:46 4859基于bboss开发项目说明 ... -
bboss序列化cglib代理对象方法介绍
2014-06-22 15:14 1153本文介绍bboss序列化cglib代理对象方法。经过cglib ... -
bboss自定义类对象序列化机制介绍
2014-05-26 23:32 1467bboss自定义类对象序列 ... -
bboss将一个组件同时发布为webservice,hessian,http三种服务方法介绍
2014-04-12 14:31 1651bboss将一个组件同时发布为webservice,hessi ... -
bboss发布apache cxf 2.7.6服务和定义客户端服务实例可能产生冲突解决办法
2014-03-22 23:16 1085bboss发布apache cxf 2.7.6服务和定义客户端 ... -
扩展Activiti-5.12轻松实现流程节点间自由跳转和任意驳回/撤回
2013-05-28 01:33 17946由于项目需要,最近对开源工作流引擎Activiti-5.12的 ... -
bboss离线开发文档下载
2013-05-14 18:08 1859bboss离线开发文档下载 为了便于bboss开发人员离线查找 ... -
bboss 发布和使用hessian服务方法介绍
2013-02-25 23:21 2107hessian是一款性能非常不错的RPC通讯组件,最近抽空将b ... -
bboss quartz组件全攻略
2013-01-27 13:31 2614bboss quartz组件全攻略 本 ... -
bboss aop拦截器使用简介
2012-11-29 23:20 1207bboss aop拦截器使用简介, ... -
bboss持久层事务管理组件TransactionManager增加两个release方法
2012-08-25 11:56 1548bboss持久层事务管理组件TransactionManage ... -
bboss ioc容器之间组件引用方法简介
2012-08-04 15:09 1328bboss ioc容器之间组件引用方法简介。我们可以在ioc容 ... -
Rest协议框架-bboss rpc
2012-08-03 12:51 1350restful风格rpc服务协议rest,定义的语法如下: ... -
解决cxf+bboss发布的webservice缺少<wsdl:types>和<wsdl:message>标签的问题
2012-06-19 10:11 1786cxf+bboss发布webservice服务 ... -
Bboss国际化实践PPT
2012-06-10 12:52 1371Bboss国际化实践PPT,点击链接即可下载: Bboss国际 ...
相关推荐
bboss框架集成了AOP/iOC、MVC、持久化标签库、RPC、事件处理、Bean-XML序列化等多种功能。本项目基于bboss框架构建了数据采集ETL工具、流批一体化Stream工具、Elasticsearch客户端工具和WebSession共享框架等应用。
BBoss是一个轻量级的企业级应用开发框架,提供了IOC(Inversion of Control)功能,使得对象之间的依赖关系可以通过配置文件进行管理。本文将详细介绍如何在BBoss的IOC配置文件中引用外部属性文件,以便更好地管理和...
4. **AOP(面向切面编程)**:BBoss MVCDemo支持AOP,可以实现如事务管理、日志记录、权限控制等功能,提高代码的复用性和可维护性。 5. **国际化与本地化**:框架内置了国际化和本地化支持,使得应用可以根据用户...
通过阅读`SYSAuthenticateFilter.java`的源码,我们可以深入了解BBoss框架如何实现这些功能,并学习如何自定义和扩展安全认证过滤器,以满足特定的应用场景需求。源码分析有助于我们更好地理解和控制Web应用的安全...
官方版本,亲测可用
官方版本,亲测可用
bboss功能涵盖ioc,mvc,jsp自定义标签库,持久层,全局事务托管,安全认证,SSO,web会话共享,cxfwebservice服务发布和管理,hessian服务发布和管理等功能。另外还提供了符合中国式自由流的bboss activiti工作流...
该工具是一款基于bboss...此工具能够自动生成bboss MVC、IOC、持久化、JSP、i18n、SQL配置文件、Web服务、Hessian服务等相关源代码,适用于快速开发和项目迭代。详细文档请参考:http://yin-bp.iteye.com/blog/2256948
本实例是一个基于bboss es spring boot starter的demo maven工程,可供spring boot项目集成bboss elasticsearch rest client参考 展示了通过spring boot管理单集群功能和管理多集群功能 单集群测试用例:...
bboss会话共享通过为应用提供统一的会话管理功能,保证了即使用户被切换到其他节点,也能够继续访问之前保存的会话数据。 其次,bboss会话共享支持跨域和跨应用的会话共享,并能实现单点登录(SSO)功能。单点登录...
自动代码生成器是针对bboss框架和bboss开发平台的自动代码生成工具,可以根据模板,自动生成给定表的增,删,改,分页查询,列表查询,国际化功能对应的程序和配置文件: 1.mvc控制器 2.业务组件 3.实体类 4.jsp文件...
弹性Tran老板数据交换模块使用文档: : Bboss是一个很好的Elasticsearch Java Rest客户端。 它运行并访问像mybatis这样的... 首先将BBoss的maven依赖项添加到pom.xml中: < dependency> < groupId>com.bbossgroups.p
**bboss-datatran** 是一个由 **bboss** 社区开源的高效数据处理工具,专注于数据采集、数据清洗转换以及数据入库等任务。它实现了流批一体化的数据处理能力,使得用户能够灵活地应对实时和批量的数据处理场景。在...
集成bboss和Elasticsearch时,首先需要在项目中引入bboss的依赖,并配置Elasticsearch的相关连接信息,如集群名称、节点地址等。然后可以通过bboss提供的API进行索引创建、数据插入、查询、更新、删除等操作。 4. ...
**二、BBoss介绍** BBoss 是一个针对 Elasticsearch 的企业级开发框架,它提供了丰富的 Java API,使得开发者可以更简单地进行索引管理、查询构建、结果分析等操作。BBoss 还支持多版本兼容,方便应对 Elasticsearch...
1. **组件化开发**:BBoss支持模块化和组件化的开发模式,允许开发者根据项目需求选择必要的功能组件,避免了传统框架中“大而全”的问题,降低了系统的复杂度。 2. **数据库操作**:BBoss提供了便捷的数据访问层...
Elasticsearch rest client bboss介绍-Elastic2018中国开发者大会演讲稿
bboss集团网站: bboss组项目博客: bboss版本重建方法 gradle安装 开发工程生成方法: dle蚀 Gradle的想法 亦可以直接通过idea或eclipse gradle插件将下载的bboss源码工程导入eclipse或者idea bboss原始码 ...