- 浏览: 695152 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (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 ioc配置语法简洁而严谨,提供了强大的依赖注入功能,而且开发人员可以任意为ioc元素property增加扩展属性,从而实现自定义的ioc依赖注入功能。业界其他ioc框架自定义扩展ioc语法,可能需要编写xsd描述文件,bboss ioc很容易扩展且不需要编写xsd文件,本文举例说明如何实现bboss中的自定义ioc依赖注入功能。
实现这个功能需要三个步骤:
1.定义好ioc依赖注入插件,插件必须实现接口:
org.frameworkset.spi.assemble.plugin.IocPlugin<T,R>
2.利用写好的插件编写ioc xml文件
3.定义一个加载写好的ioc xml文件的ioc容器并获取通过自定义ioc机制定义的组件
接下来举例说明上述三个步骤,这个示例的功能很简单:定义了几个excel导入模板,通过ioc语法来描述这些模板结构信息,然后通过ioc依赖注入插件来将这些excel模板信息解析成一个Map<String, ExcelTemplate>对象,然后利用模板信息实现一个通用的excel导入功能。
第一步 编写ioc注入插件以及依赖的excel模板结构po对象
ioc注入插件-ExcelIOCPlugin 接口方法接收一个ProMap结构,其中包含了excel导入模板map数据结构,这些信息通过ioc xml语法描述
ExcelTemplate模板信息类-包含了execl的数据起始行和数据结束行以及单元格信息列表等
excel单元格对象-包含单元格位置、单元格数据类型、单元格对应的java值对象属性名称
第二步 定义ioc xml文件-excelFieldInfo.xml
excelFieldInfo.xml存放在包路径org/frameworkset/spi/assemble/plugin下面,内容为:
内容说明:
组件excelMapping配置了ioc依赖注入插件:
iocplugin="org.frameworkset.spi.assemble.plugin.ExcelIOCPlugin"
通过插件ExcelIOCPlugin会将excelMapping转换为一个Map<String, ExcelTemplate>对象,这个对象会被注入给业务组件POIExcelService的excelTemplates属性。
POIExcelService组件的实现类如下:
第三步 验证功能-编写和执行测试用例
相关测试用例源码github获取地址:
https://github.com/bbossgroups/bbossgroups-3.5/tree/master/bboss-core/test/org/frameworkset/spi/assemble/plugin
实现这个功能需要三个步骤:
1.定义好ioc依赖注入插件,插件必须实现接口:
org.frameworkset.spi.assemble.plugin.IocPlugin<T,R>
public interface IocPlugin<T,R> { /** * 返回扩展ioc机制生成的对象实例 * @param object 输入的ioc元素对象,类型范围为:Pro,ProMap,ProList,ProArray,ProSet * @param callcontext ioc依赖注入上下文,用来提供对循环依赖注入支持的 * @return */ public R ioc(T object, CallContext callcontext); }
2.利用写好的插件编写ioc xml文件
3.定义一个加载写好的ioc xml文件的ioc容器并获取通过自定义ioc机制定义的组件
接下来举例说明上述三个步骤,这个示例的功能很简单:定义了几个excel导入模板,通过ioc语法来描述这些模板结构信息,然后通过ioc依赖注入插件来将这些excel模板信息解析成一个Map<String, ExcelTemplate>对象,然后利用模板信息实现一个通用的excel导入功能。
第一步 编写ioc注入插件以及依赖的excel模板结构po对象
ioc注入插件-ExcelIOCPlugin 接口方法接收一个ProMap结构,其中包含了excel导入模板map数据结构,这些信息通过ioc xml语法描述
package org.frameworkset.spi.assemble.plugin; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.frameworkset.spi.CallContext; import org.frameworkset.spi.assemble.Pro; import org.frameworkset.spi.assemble.ProList; import org.frameworkset.spi.assemble.ProMap; public class ExcelIOCPlugin implements IocPlugin<ProMap, Map<String, ExcelTemplate>>{ @Override public Map<String, ExcelTemplate> ioc(ProMap promap, CallContext callcontext) { Map<String, ExcelTemplate> excelTemplates = new HashMap<String, ExcelTemplate>(); Set<Map.Entry<String, Pro>> entries = promap.entrySet(); Iterator<Map.Entry<String, Pro>> it = entries.iterator(); while (it.hasNext()) { Map.Entry<String, Pro> e = it.next(); String name = e.getKey(); Pro pro = e.getValue(); String templatepath = pro.getStringExtendAttribute("templatepath"); ExcelTemplate template = new ExcelTemplate(); template.setName(name); template.setStarrow(pro.getIntExtendAttribute("statrow", 1)); template.setEndrow(pro.getIntExtendAttribute("endrow", -1)); template.setTemplatepath(templatepath); excelTemplates.put(name, template); if(!name.equals("exceltemplatefile4"))//根据ioc元数据手动构建execl模板的单元格信息 { List<ExcelCell> cellList = new ArrayList<ExcelCell>(); ProList templateCellList = pro.getList(); for (int i = 0; i < templateCellList.size(); i++) { Pro cellPro = (Pro) templateCellList.get(i); ExcelCell cellBean = new ExcelCell(); cellBean.setCellpostion(cellPro.getIntExtendAttribute("cellpostion")); cellBean.setJavaFiledName(cellPro.getStringExtendAttribute("javaFiledName")); cellBean.setCelltype(cellPro.getStringExtendAttribute("celltype")); cellList.add(cellBean); } template.setCells(cellList); } else//利用bboss ioc原生功能自动构建execl模板的单元格信息 { @SuppressWarnings("unchecked") List<ExcelCell> cellList = (List<ExcelCell>) pro.getBeanObject(callcontext); template.setCells(cellList); } } return excelTemplates; } }
ExcelTemplate模板信息类-包含了execl的数据起始行和数据结束行以及单元格信息列表等
package org.frameworkset.spi.assemble.plugin; import java.util.List; public class ExcelTemplate { String name; String templatepath; int starrow; int endrow = -1; List<ExcelCell> cells; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTemplatepath() { return templatepath; } public void setTemplatepath(String templatepath) { this.templatepath = templatepath; } public int getStarrow() { return starrow; } public void setStarrow(int starrow) { this.starrow = starrow; } public int getEndrow() { return endrow; } public void setEndrow(int endrow) { this.endrow = endrow; } public List<ExcelCell> getCells() { return cells; } public void setCells(List<ExcelCell> cells) { this.cells = cells; } }
excel单元格对象-包含单元格位置、单元格数据类型、单元格对应的java值对象属性名称
package org.frameworkset.spi.assemble.plugin; public class ExcelCell { private int cellpostion; private String javaFiledName; private String celltype; public int getCellpostion() { return cellpostion; } public void setCellpostion(int cellpostion) { this.cellpostion = cellpostion; } public String getCelltype() { return celltype; } public void setCelltype(String celltype) { this.celltype = celltype; } public String getJavaFiledName() { return javaFiledName; } public void setJavaFiledName(String javaFiledName) { this.javaFiledName = javaFiledName; } }
第二步 定义ioc xml文件-excelFieldInfo.xml
excelFieldInfo.xml存放在包路径org/frameworkset/spi/assemble/plugin下面,内容为:
<?xml version="1.0" encoding="UTF-8"?> <properties> <property name="excelMapping" iocplugin="org.frameworkset.spi.assemble.plugin.ExcelIOCPlugin"> <map componentType="bean"> <property name="exceltemplatefile1" templatepath="/usr/local/exceltemplates/file1.xlsx" statrow="1" endrow="1000"> <list componentType="bean"> <property cellpostion="1" javaFiledName="companyname" celltype="VARCHAR"/> <property cellpostion="2" javaFiledName="age" celltype="INTEGER"/> <property cellpostion="3" javaFiledName="sex" celltype="VARCHAR"/> <property cellpostion="4" javaFiledName="description" celltype="VARCHAR"/> </list> </property> <property name="exceltemplatefile2" templatepath="/usr/local/exceltemplates/file2.xlsx" statrow="1" endrow="1000"> <list componentType="bean"> <property cellpostion="1" javaFiledName="factoryname" celltype="VARCHAR"/> <property cellpostion="2" javaFiledName="createyear" celltype="DATE"/> <property cellpostion="3" javaFiledName="address" celltype="VARCHAR"/> <property cellpostion="4" javaFiledName="worksers" celltype="VARCHAR"/> </list> </property> <property name="exceltemplatefile3" templatepath="/usr/local/exceltemplates/file3.xlsx" statrow="1" endrow="1000"> <list componentType="bean"> <property cellpostion="1" javaFiledName="product" celltype="VARCHAR"/> <property cellpostion="2" javaFiledName="totalcount" celltype="INTEGER"/> <property cellpostion="3" javaFiledName="name" celltype="VARCHAR"/> <property cellpostion="4" javaFiledName="description" celltype="VARCHAR"/> </list> </property> <property name="exceltemplatefile4" templatepath="/usr/local/exceltemplates/file3.xlsx" statrow="1" endrow="1000"> <list componentType="bean"> <property class="org.frameworkset.spi.assemble.plugin.ExcelCell" f:cellpostion="1" f:javaFiledName="product" f:celltype="VARCHAR"/> <property class="org.frameworkset.spi.assemble.plugin.ExcelCell" f:cellpostion="2" f:javaFiledName="totalcount" f:celltype="INTEGER"/> <property class="org.frameworkset.spi.assemble.plugin.ExcelCell" f:cellpostion="3" f:javaFiledName="name" f:celltype="VARCHAR"/> <property class="org.frameworkset.spi.assemble.plugin.ExcelCell" f:cellpostion="4" f:javaFiledName="description" f:celltype="VARCHAR"/> </list> </property> </map> </property> <property name="POIExcelService" class="org.frameworkset.spi.assemble.plugin.POIExcelService" f:excelTemplates="attr:excelMapping"/> </properties>
内容说明:
组件excelMapping配置了ioc依赖注入插件:
iocplugin="org.frameworkset.spi.assemble.plugin.ExcelIOCPlugin"
通过插件ExcelIOCPlugin会将excelMapping转换为一个Map<String, ExcelTemplate>对象,这个对象会被注入给业务组件POIExcelService的excelTemplates属性。
POIExcelService组件的实现类如下:
package org.frameworkset.spi.assemble.plugin; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.Map; /** * 本实例演示ioc注入插件的使用方法,通过ioc注入插件来扩展ioc依赖注入功能,实现自己的ioc依赖注入功能 * @author yinbp * */ public class POIExcelService { /** * 存储各种execl模板信息,模板的映射信息全部都设置在ioc配置文件中 */ private Map<String, ExcelTemplate> excelTemplates; /** * 根据传入的excel流,将其中的数据根据对应的excel模板信息类将数据解析出来,形成beanType对象记录列表返回 * * @param file * @return * @throws IOException */ public <T> List<T> parseHSSFMapList(InputStream in,Class<T> beanType,String templatename) throws IOException { ExcelTemplate template = excelTemplates.get(templatename);//获取excel模板 //根据模板,从excel输入流in对象中获取excel文件中包含的所有记录形成一个List<beanType>的集合并返回: List<beanType> datas = .....; return datas ; } }
第三步 验证功能-编写和执行测试用例
package org.frameworkset.spi.assemble.plugin; import java.io.IOException; import org.frameworkset.spi.BaseApplicationContext; import org.frameworkset.spi.DefaultApplicationContext; import org.junit.Test; public class TestIocPlugin { @Test public void testiocplugin() throws IOException { BaseApplicationContext excelMapping = DefaultApplicationContext.getApplicationContext("org/frameworkset/spi/assemble/plugin/excelFieldInfo.xml");//定义ioc容器 POIExcelService serice = excelMapping.getTBeanObject("POIExcelService", POIExcelService.class);//获取业务组件,ioc容器会通过ioc插件解析excelMapping组件元素并返回一个Map<String, ExcelTemplate>类型对象 List datas = serice.parseHSSFMapList(in, dataClass,"exceltemplatefile1");//执行业务方法 } }
相关测试用例源码github获取地址:
https://github.com/bbossgroups/bbossgroups-3.5/tree/master/bboss-core/test/org/frameworkset/spi/assemble/plugin
发表评论
-
bboss ioc快速入门教程
2017-08-13 11:28 1276bboss是一个非常不错的ioc框架,功能类似于spr ... -
bboss ioc配置文件中使用外部属性文件介绍
2016-09-20 11:35 1143bboss ioc配置文件中使用外部属性文件介绍 与spri ... -
bboss与spring中配置和引用bboss数据源和bboss dao组件方法说明
2016-08-10 16:04 916首先在项目中导入bboss 持久层包: maven坐标 & ... -
bboss ioc提供的组件初始化工具类介绍
2016-03-18 16:17 738bboss ioc提供的组件初始化工具类介绍 bboss i ... -
bboss序列化cglib代理对象方法介绍
2014-06-22 15:14 1159本文介绍bboss序列化cglib代理对象方法。经过cglib ... -
bboss自定义类对象序列化机制介绍
2014-05-26 23:32 1471bboss自定义类对象序列 ... -
bboss将一个组件同时发布为webservice,hessian,http三种服务方法介绍
2014-04-12 14:31 1654bboss将一个组件同时发布为webservice,hessi ... -
bboss发布apache cxf 2.7.6服务和定义客户端服务实例可能产生冲突解决办法
2014-03-22 23:16 1088bboss发布apache cxf 2.7.6服务和定义客户端 ... -
bboss 发布和使用hessian服务方法介绍
2013-02-25 23:21 2112hessian是一款性能非常不错的RPC通讯组件,最近抽空将b ... -
bboss quartz组件全攻略
2013-01-27 13:31 2621bboss quartz组件全攻略 本 ... -
bboss aop拦截器使用简介
2012-11-29 23:20 1207bboss aop拦截器使用简介, ... -
bboss ioc容器之间组件引用方法简介
2012-08-04 15:09 1337bboss ioc容器之间组件引用方法简介。我们可以在ioc容 ... -
Rest协议框架-bboss rpc
2012-08-03 12:51 1355restful风格rpc服务协议rest,定义的语法如下: ... -
解决cxf+bboss发布的webservice缺少<wsdl:types>和<wsdl:message>标签的问题
2012-06-19 10:11 1791cxf+bboss发布webservice服务 ... -
开源工作流引擎activiti与bboss整合使用方法浅析
2012-05-01 11:35 5224本文介绍开源工作流引擎activiti与bboss ioc框架 ... -
bboss aop/ioc组件配置语法诠释
2012-03-01 18:38 2206这篇文章全面介绍bboss ioc 配置语法,希望对 ... -
bboss aop/ioc依赖注入功能介绍
2012-02-12 14:40 1768bboss aop 3.5及后续版本中改进的ioc依赖注入功能 ... -
Bboss和xstream序列化/反序列化性能对比
2011-10-13 00:18 1983Bboss和xstream序列化/反序列化性能对比 本报告分别 ... -
bboss 组件容器的使用方法浅析
2011-08-20 00:21 1665本文重点介绍bboss 中的4大组件容器的特点及使用方法 4 ... -
bboss特色介绍
2011-06-12 15:43 18925bboss是一个j2ee开 ...
相关推荐
BBoss是一个轻量级的企业级应用开发框架,提供了IOC(Inversion of Control)功能,使得对象之间的依赖关系可以通过配置文件进行管理。本文将详细介绍如何在BBoss的IOC配置文件中引用外部属性文件,以便更好地管理和...
4. **AOP(面向切面编程)**:BBoss MVCDemo支持AOP,可以实现如事务管理、日志记录、权限控制等功能,提高代码的复用性和可维护性。 5. **国际化与本地化**:框架内置了国际化和本地化支持,使得应用可以根据用户...
通过阅读`SYSAuthenticateFilter.java`的源码,我们可以深入了解BBoss框架如何实现这些功能,并学习如何自定义和扩展安全认证过滤器,以满足特定的应用场景需求。源码分析有助于我们更好地理解和控制Web应用的安全...
在应用集成方面,bboss会话共享提供了一个插件,其扩展性强,作用在于为应用提供统一的会话管理功能。开发者需要将原来的容器session监听器迁移到bboss会话共享实现。对于修改session中的对象数据,必须调用session....
bboss功能涵盖ioc,mvc,jsp自定义标签库,持久层,全局事务托管,安全认证,SSO,web会话共享,cxfwebservice服务发布和管理,hessian服务发布和管理等功能。另外还提供了符合中国式自由流的bboss activiti工作流...
1. **缓存策略**:BBoss Persistent允许开发者自定义缓存策略,以避免一次性加载整个CLOB或BLOB数据。它可以分块读取和写入,减少内存消耗。例如,当读取BLOB数据时,可以设置每次读取的字节数,以控制内存使用。 2...
**bboss-datatran** 是一个由 **bboss** 社区开源的高效数据处理工具,专注于数据采集、数据清洗转换以及数据入库等任务。它实现了流批一体化的数据处理能力,使得用户能够灵活地应对实时和批量的数据处理场景。在...
5. **高级功能**: 学习如何利用 BBoss 进行聚合分析、自定义插件开发、性能优化等进阶操作。 **五、视频教程** 1. **搭建bboss elasticsearch开发环境.wmv**: 这个视频将指导你完成从安装Elasticsearch到配置BBoss...
本实例是一个基于bboss es spring boot starter的demo maven工程,可供spring boot项目集成bboss elasticsearch rest client参考 展示了通过spring boot管理单集群功能和管理多集群功能 单集群测试用例:...
1. **组件化开发**:BBoss支持模块化和组件化的开发模式,允许开发者根据项目需求选择必要的功能组件,避免了传统框架中“大而全”的问题,降低了系统的复杂度。 2. **数据库操作**:BBoss提供了便捷的数据访问层...
6. `bboss-velocity-5.5.0.jar`:Velocity是Apache的一个模板引擎,用于生成动态内容,可能在BBoss Elasticsearch中用于构建自定义模板,生成用于导入Elasticsearch的JSON格式数据。 7. `bboss-core-5.5.0.jar`:这...
DSL语法丰富,支持全文搜索、范围查询、多条件组合查询、聚合分析等多种功能。bboss的DSL支持使开发者能够写出更简洁、直观的代码。 5. **Java使用示例** 在`demo`这个文件中,可能包含了使用bboss操作Elastic...
本实例是一个基于bboss es spring boot starter的demo maven工程,可供spring boot项目集成bboss elasticsearch rest client参考 展示了通过spring boot管理单集群功能和管理多集群功能 单集群测试用例:...
标题“bboss mvc 通过jsonp实现跨站跨域远程访问”揭示了本文将探讨如何使用bboss MVC框架处理一个常见的Web开发问题——跨站脚本(Cross-Origin Resource Sharing,简称CORS)限制。bboss MVC是一个轻量级的企业级...
bboss框架集成了AOP/iOC、MVC、持久化标签库、RPC、事件处理、Bean-XML序列化等多种功能。本项目基于bboss框架构建了数据采集ETL工具、流批一体化Stream工具、Elasticsearch客户端工具和WebSession共享框架等应用。
bbosssession是一个用于集群环境中实现会话共享的解决方案,它提供了第四代集群会话管理的完整实现,与之前的会话管理方式相比,有着诸多优势和特点。本培训文档将介绍集群session管理的发展历史、bbosssession的...