- 浏览: 700297 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (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拦截器使用简介,本文适用于最新的bboss版本,下载方法参考:
http://yin-bp.iteye.com/blog/1080824
1.概述
bboss aop/ioc框架支持给组件配置一到多个拦截器,拦截器执行的顺序为类似堆栈的先入后出的模式,before方法按顺序执行(先入),其他方法采用逆序方式执行(后出,先执行最后一个拦截器的其他方法,最后执行第一个拦截器的其他方法)。
这里需要补充说明一下,声明式事务拦截器是bboss内置的一个拦截器,事务拦截器作为组件的所有拦截器中最后一个拦截器执行,同样遵循上面的先入后出原则。
2.拦截器接口
Interceptor 接口定义了四个接口方法:
before-在方法执行之前执行,如果抛出异常,就会终止方法继续执行,同时将异常传递到应用层。
after-在方法执行之后执行,如果抛出异常,就会终止后续其他方法执行,同时将异常传递到应用层。
afterThrowing-当方法执行过程中抛出异常时执行,如果抛出异常,就会终止后续其他方法执行,同时将异常传递到应用层。
afterFinally-在方法finally后执行,如果抛出异常,就会终止后续其他方法执行,同时将异常传递到应用层。
所以在实现自己的Interceptor 时,一定要注意异常的处理,因为拦截器方法的异常会影响组件方法的执行流程。
3.一个具体的拦截器
拦截器InterceptorImpl 中定义了一个全局变量:
private A a;
我们可以对拦截器应用依赖注入(ioc)机制来注入其他业务组件和属性,也就是说拦截器组件本身也是以组件的方式来管理,ioc的所有机制都可以应用于拦截器xml配置节点interceptor,下面具体介绍配置xml元素-interceptor的用法。
4.拦截器配置xml元素-interceptor
interceptor元素作为组件定义元素property的内置元素使用,用来配置组件的aop拦截器。interceptor元素内置method元素,用来配置组件中需要被该拦截器拦截的具体方法,如果没有配置method元素,则对应的拦截器将拦截组件中所有的方法。如果组件配置了多个拦截器,每个拦截器都可以配置自己需要拦截的具体方法。
下面是一个配置实例:
说明:
情形一
<interceptor class="org.frameworkset.spi.properties.interceptor.InterceptorImpl"
f:a="attr:test.bean"
/>
这种配置拦截所有方法,同时我们为拦截器中的属性a注入了另外一个组件实例。
情形二
<interceptor class="org.frameworkset.spi.properties.interceptor.InterceptorImpl"
f:a="attr:test.bean"
>
<method name="test">
<param type="java.lang.String"/>
</method>
</interceptor>
这里通过method元素指定了拦截器需要拦截的组件方法,可以配置多个:
<method name="test">
<param type="java.lang.String"/>
</method>
如果是具体的方法就需要指定方法的参数,如果是采用pattern(正则表达式)则无需指定方法参数,例如:
<method pattern="test.*"/>//表示拦截所有以test开头的方法,这里遵循标准的java正则表达式语法
<method pattern="*"/>//表示拦截所有方法,这里遵循标准的java正则表达式语法
情形三
如果有多个拦截器,请按顺序配置即可:
5.内置的声明式事务拦截器配置需要拦截的事务方法配置示例
借助transactions元素和method来进行声明式事务方法配置。transactions和interceptor元素不一样,当transactions中没有配置method时,事务拦截器不会拦截组件的任何方法;而在transactions元素中method方法可以通过txtype属性指定方法需要开启的事务类型,并且在method元素中还可以通过rollbackexceptions和exception元素结合配置需要回滚事务的异常信息。下面是transactions的配置实例:
说明:transactions和interceptor元素一起使用,这时transactions将会作为最后一个拦截器执行。
ok,bboss的所有拦截器机制和示例就介绍到此。
http://yin-bp.iteye.com/blog/1080824
1.概述
bboss aop/ioc框架支持给组件配置一到多个拦截器,拦截器执行的顺序为类似堆栈的先入后出的模式,before方法按顺序执行(先入),其他方法采用逆序方式执行(后出,先执行最后一个拦截器的其他方法,最后执行第一个拦截器的其他方法)。
这里需要补充说明一下,声明式事务拦截器是bboss内置的一个拦截器,事务拦截器作为组件的所有拦截器中最后一个拦截器执行,同样遵循上面的先入后出原则。
2.拦截器接口
package com.frameworkset.proxy; import java.lang.reflect.Method; public interface Interceptor { public void before(Method method,Object[] args) throws Throwable; public void after(Method method,Object[] args) throws Throwable; public void afterThrowing(Method method,Object[] args,Throwable throwable) throws Throwable; public void afterFinally(Method method,Object[] args) throws Throwable; }
Interceptor 接口定义了四个接口方法:
before-在方法执行之前执行,如果抛出异常,就会终止方法继续执行,同时将异常传递到应用层。
after-在方法执行之后执行,如果抛出异常,就会终止后续其他方法执行,同时将异常传递到应用层。
afterThrowing-当方法执行过程中抛出异常时执行,如果抛出异常,就会终止后续其他方法执行,同时将异常传递到应用层。
afterFinally-在方法finally后执行,如果抛出异常,就会终止后续其他方法执行,同时将异常传递到应用层。
所以在实现自己的Interceptor 时,一定要注意异常的处理,因为拦截器方法的异常会影响组件方法的执行流程。
3.一个具体的拦截器
package org.frameworkset.spi.properties.interceptor; import java.lang.reflect.Method; import com.frameworkset.proxy.Interceptor; public class InterceptorImpl implements Interceptor { private A a; public void after(Method method, Object[] args) throws Throwable { System.out.println("Insterceptor.after(" + method.getName() + ", Object[] args)=" + args[0]); } public void afterFinally(Method method, Object[] args) throws Throwable { System.out.println("Insterceptor.afterFinally(" + method.getName() + ", Object[] args)=" + args[0]); } public void afterThrowing(Method method, Object[] args, Throwable throwable) throws Throwable { System.out.println("Insterceptor.afterThrowing(" + method.getName() + ", Object[] args, Throwable throwable)=" + args[0]); } public void before(Method method, Object[] args) throws Throwable { System.out.println("Insterceptor.before(" + method.getName() + ", Object[] args)=" + args[0]); } }
拦截器InterceptorImpl 中定义了一个全局变量:
private A a;
我们可以对拦截器应用依赖注入(ioc)机制来注入其他业务组件和属性,也就是说拦截器组件本身也是以组件的方式来管理,ioc的所有机制都可以应用于拦截器xml配置节点interceptor,下面具体介绍配置xml元素-interceptor的用法。
4.拦截器配置xml元素-interceptor
interceptor元素作为组件定义元素property的内置元素使用,用来配置组件的aop拦截器。interceptor元素内置method元素,用来配置组件中需要被该拦截器拦截的具体方法,如果没有配置method元素,则对应的拦截器将拦截组件中所有的方法。如果组件配置了多个拦截器,每个拦截器都可以配置自己需要拦截的具体方法。
下面是一个配置实例:
<properties> <property name="test.interceptorbean" singlable="true" class="org.frameworkset.spi.properties.interceptor.A"> <interceptor class="org.frameworkset.spi.properties.interceptor.InterceptorImpl" f:a="attr:test.bean" /> </property> <property name="test.interceptorbeanmethod" singlable="true" class="org.frameworkset.spi.properties.interceptor.A"> <interceptor class="org.frameworkset.spi.properties.interceptor.InterceptorImpl" f:a="attr:test.bean" > <method name="test"> <param type="java.lang.String"/> </method> </interceptor> </property> <property name="test.bean" singlable="true" class="org.frameworkset.spi.properties.interceptor.A"> </property> </properties>
说明:
情形一
<interceptor class="org.frameworkset.spi.properties.interceptor.InterceptorImpl"
f:a="attr:test.bean"
/>
这种配置拦截所有方法,同时我们为拦截器中的属性a注入了另外一个组件实例。
情形二
<interceptor class="org.frameworkset.spi.properties.interceptor.InterceptorImpl"
f:a="attr:test.bean"
>
<method name="test">
<param type="java.lang.String"/>
</method>
</interceptor>
这里通过method元素指定了拦截器需要拦截的组件方法,可以配置多个:
<method name="test">
<param type="java.lang.String"/>
</method>
如果是具体的方法就需要指定方法的参数,如果是采用pattern(正则表达式)则无需指定方法参数,例如:
<method pattern="test.*"/>//表示拦截所有以test开头的方法,这里遵循标准的java正则表达式语法
<method pattern="*"/>//表示拦截所有方法,这里遵循标准的java正则表达式语法
情形三
如果有多个拦截器,请按顺序配置即可:
<interceptor class="org.frameworkset.spi.properties.interceptor.PermissioncheckInterceptorImpl" f:a="attr:test.bean" /> <interceptor class="org.frameworkset.spi.properties.interceptor.LogInterceptorImpl" f:a="attr:test.bean" />
5.内置的声明式事务拦截器配置需要拦截的事务方法配置示例
借助transactions元素和method来进行声明式事务方法配置。transactions和interceptor元素不一样,当transactions中没有配置method时,事务拦截器不会拦截组件的任何方法;而在transactions元素中method方法可以通过txtype属性指定方法需要开启的事务类型,并且在method元素中还可以通过rollbackexceptions和exception元素结合配置需要回滚事务的异常信息。下面是transactions的配置实例:
<property id="tx.a" singlable="true" class="org.frameworkset.spi.transaction.A1" > <!-- 在下面的节点对组件的业务方法事务进行定义 只要将需要进行事务控制的方法配置在transactions中即可 --> <transactions> <!-- 定义需要进行事务控制的方法 属性说明: name-方法名称,可以是一个正则表达式,正则表达式的语法请参考jakarta-oro的相关文档,如果使用 正则表达式的情况时,则方法中声明的方法参数将被忽略,但是回滚异常有效。 pattern-方法名称的正则表达式匹配模式,模式匹配的顺序受配置位置的影响,如果配置在后面或者中间, 那么会先执行之前的方法匹配,如果匹配上了就不会对该模式方法进行匹配了,否则执行匹配操作。 如果匹配上特定的方法名称,那么这个方法就是需要进行事务控制的方法 例如:模式testInt.*匹配接口中以testInt开头的任何方法 txtype-需要控制的事务类型,取值范围: NEW_TRANSACTION, REQUIRED_TRANSACTION, MAYBE_TRANSACTION, NO_TRANSACTION RW_TRANSACTION --> <method name="testTXInvoke" txtype="NEW_TRANSACTION"> <param type="java.lang.String"/> </method> <method name="testTXInvoke" txtype="REQUIRED_TRANSACTION"/> <method name="testTXInvokeWithReturn" txtype="REQUIRED_TRANSACTION"/> <method name="testTXInvokeWithException" txtype="MAYBE_TRANSACTION"/> <method name="testSameName" txtype="NO_TRANSACTION"/> <method name="testSameName1"> <param type="java.lang.String"/> </method> <!-- 定义使事务回滚的异常,如果没有明确声明需要回滚事务的异常,那么当有异常发生时, 事务管理框架将自动回滚当前事务 class-异常的完整类路径 type-是否检测类型异常的子类控制标识, IMPLEMENTS只检测异常类本身,忽略异常类的子类; INSTANCEOF检查异常类本省及其所有子类 --> <method name="testTXWithSpecialExceptions"> <rollbackexceptions> <exception class="org.frameworkset.spi.transaction.RollbackInstanceofException" type="INSTANCEOF"/> <exception class="org.frameworkset.spi.transaction.Exception1" type="IMPLEMENTS"/> </rollbackexceptions> <param type="java.lang.String"/> </method> <method name="testTXWithInstanceofExceptions"> <rollbackexceptions> <exception class="org.frameworkset.spi.transaction.RollbackInstanceofException" type="INSTANCEOF"/> </rollbackexceptions> <param type="java.lang.String"/> </method> <method name="testTXWithImplementsofExceptions"> <rollbackexceptions> <exception class="org.frameworkset.spi.transaction.RollbackInstanceofException" type="IMPLEMENTS"/> </rollbackexceptions> <param type="java.lang.String"/> </method> <!-- 如果涉及的方法名称是一个正则表达式的匹配模式,则无需配置方法参数 如果指定的方法没有参数则无需指定参数 注意参数出现的位置顺序和实际方法定义的参数顺序保持一致 模式为* 表示匹配所有的方法 --> <!-- 通过模式方法进行声明式事务控制,同时声明了需要回滚事务的异常 pattern【testPatternTX[1-9.]*】表示以testPatternTX开头的所有方法 --> <!--<method pattern="testPatternTX[1-9.]*"> <rollbackexceptions> <exception class="org.frameworkset.spi.transaction.RollbackInstanceofException" type="IMPLEMENTS"/> </rollbackexceptions> <param type="java.lang.String"/> </method>--> <!-- 通过模式方法进行声明式事务控制 pattern【testPatternTX[1-9.]*】表示以testPatternTX开头的所有方法 --> <method pattern="testPatternTX[1-9.]*"/> <!-- 系统级别的异常java.lang.NullPointException,导致事务回滚 --> <method name="testSystemException"> <rollbackexceptions> <exception class="org.frameworkset.spi.transaction.RollbackInstanceofException" type="IMPLEMENTS"/> </rollbackexceptions> </method> </transactions> </property>
说明:transactions和interceptor元素一起使用,这时transactions将会作为最后一个拦截器执行。
ok,bboss的所有拦截器机制和示例就介绍到此。
发表评论
-
bboss ioc快速入门教程
2017-08-13 11:28 1285bboss是一个非常不错的ioc框架,功能类似于spr ... -
bboss ioc配置文件中使用外部属性文件介绍
2016-09-20 11:35 1159bboss ioc配置文件中使用外部属性文件介绍 与spri ... -
bboss与spring中配置和引用bboss数据源和bboss dao组件方法说明
2016-08-10 16:04 925首先在项目中导入bboss 持久层包: maven坐标 & ... -
bboss ioc提供的组件初始化工具类介绍
2016-03-18 16:17 743bboss ioc提供的组件初始化工具类介绍 bboss i ... -
扩展bboss ioc语法实现自定义的ioc依赖注入功能
2015-01-20 23:08 1345bboss ioc配置语法简洁而严谨,提供了强大的依赖注入功能 ... -
bboss序列化cglib代理对象方法介绍
2014-06-22 15:14 1199本文介绍bboss序列化cglib代理对象方法。经过cglib ... -
bboss自定义类对象序列化机制介绍
2014-05-26 23:32 1483bboss自定义类对象序列 ... -
bboss将一个组件同时发布为webservice,hessian,http三种服务方法介绍
2014-04-12 14:31 1663bboss将一个组件同时发布为webservice,hessi ... -
bboss发布apache cxf 2.7.6服务和定义客户端服务实例可能产生冲突解决办法
2014-03-22 23:16 1103bboss发布apache cxf 2.7.6服务和定义客户端 ... -
bboss 发布和使用hessian服务方法介绍
2013-02-25 23:21 2131hessian是一款性能非常不错的RPC通讯组件,最近抽空将b ... -
bboss quartz组件全攻略
2013-01-27 13:31 2647bboss quartz组件全攻略 本 ... -
bboss ioc容器之间组件引用方法简介
2012-08-04 15:09 1358bboss ioc容器之间组件引用方法简介。我们可以在ioc容 ... -
Rest协议框架-bboss rpc
2012-08-03 12:51 1371restful风格rpc服务协议rest,定义的语法如下: ... -
解决cxf+bboss发布的webservice缺少<wsdl:types>和<wsdl:message>标签的问题
2012-06-19 10:11 1814cxf+bboss发布webservice服务 ... -
开源工作流引擎activiti与bboss整合使用方法浅析
2012-05-01 11:35 5244本文介绍开源工作流引擎activiti与bboss ioc框架 ... -
bboss aop/ioc组件配置语法诠释
2012-03-01 18:38 2230这篇文章全面介绍bboss ioc 配置语法,希望对 ... -
bboss aop/ioc依赖注入功能介绍
2012-02-12 14:40 1785bboss aop 3.5及后续版本中改进的ioc依赖注入功能 ... -
Bboss和xstream序列化/反序列化性能对比
2011-10-13 00:18 1999Bboss和xstream序列化/反序列化性能对比 本报告分别 ... -
bboss 组件容器的使用方法浅析
2011-08-20 00:21 1676本文重点介绍bboss 中的4大组件容器的特点及使用方法 4 ... -
bboss特色介绍
2011-06-12 15:43 18998bboss是一个j2ee开 ...
相关推荐
官方版本,亲测可用
- 扩展与自定义:指导如何根据需求扩展BBoss MVCDemo,包括自定义拦截器、过滤器等。 总的来说,BBoss MVCDemo是一个全面的开发框架,涵盖了从基础到高级的企业级应用开发各个方面。通过阅读“bboss mvc开发手册....
官方版本,亲测可用
SYSAuthenticateFilter就是BBoss框架中专门用于安全认证的过滤器,它负责拦截请求,检查用户是否已经登录并拥有访问特定资源的权限。 首先,我们来看一下`SYSAuthenticateFilter.java`这个文件。作为过滤器的实现类...
例如,在一个域下的多个子应用之间,使用bboss可以共享认证信息,用户登录其中一个应用后,无需再次登录即可访问其他应用。 文档中提到了会话共享需要解决的五大技术难题: 1. session数据序列化问题,即如何有效...
除了`<property-placeholder>`标签,BBoss还支持使用`<context:property-placeholder>`标签,它是Spring框架的一部分,也可以与BBoss集成使用。这种方式的配置类似,但提供了更多的选项,如默认值、忽略未定义的属性...
bboss框架集成了AOP/iOC、MVC、持久化标签库、RPC、事件处理、Bean-XML序列化等多种功能。本项目基于bboss框架构建了数据采集ETL工具、流批一体化Stream工具、Elasticsearch客户端工具和WebSession共享框架等应用。
本实例是一个基于bboss es spring boot starter的demo maven工程,可供spring boot项目集成bboss elasticsearch rest client参考 展示了通过spring boot管理单集群功能和管理多集群功能 单集群测试用例:...
BBoss(全称为bbossgroups)是一个专为企业级J2EE应用设计的开源框架,它为Java开发者提供了一系列强大的工具和服务,以简化Web应用程序的开发过程。该框架旨在提高开发效率,降低维护成本,同时保持高度的灵活性和...
bboss es特点请访问: https://www.oschina.net/p/bboss-elastic
2. **bboss elasticsearch开发入门教程.wmv**: 通过实例演示,讲解如何使用BBoss进行索引操作、数据插入、查询和更新,帮助初学者快速上手。 **六、资料阅读** "说明.txt" 文件可能包含了关于这些教程的详细步骤和...
在`demo`这个文件中,可能包含了使用bboss操作Elasticsearch的基本示例代码。例如,创建索引、插入文档、执行查询等。通常,这些示例会展示如何初始化bboss客户端,如何构造和执行DSL查询,以及如何处理返回结果。 ...
springboot集成ElasticsearchBboss调用Elasticsearch的案例分享
**bboss-datatran** 是一个由 **bboss** 社区开源的高效数据处理工具,专注于数据采集、数据清洗转换以及数据入库等任务。...通过深入学习和使用bboss-datatran,用户可以提升数据处理效率,更好地挖掘数据的价值。
3. `bboss-util-5.5.0.jar`和`bboss-persistent-5.5.0.jar`:这是BBoss框架的核心组件,提供了许多实用工具类和持久化操作支持,如数据库连接、事务管理等,为Elasticsearch的数据导入提供底层支持。 4. `...
【bboss-db-elasticsearch-tool-master_java_】是一个Java ORM(对象关系映射)框架,它在功能上超越了MyBatis,提供了对多种数据库的广泛支持,包括MySQL、Oracle、PostgreSQL、SQLServer、DB2、DM以及MongoDB。...
接下来,`bboss平台代码生成工具使用教程.wmv`可能涵盖了如何利用bboss的代码生成器提高开发效率。这个工具可以帮助开发者自动生成常见的CRUD操作,减少手动编写重复代码的时间。使用步骤可能包括: 1. **配置数据...
官方版本,亲测可用
BBoss Persistent是一个轻量级的持久层框架,它提供了方便的方式来处理这些大字段。本文将深入探讨在BBoss Persistent 1.0.2中如何高效地管理CLOB和BLOB数据。 首先,CLOB用于存储大量的文本数据,如长篇文章或XML...