当前位置:首页 > JavaServer Page > 正文内容

利用Guice的Aop实现切面事务管理

canca14年前 (2011-08-15)JavaServer Page540

类似于Spring的声明式事务管理,Guice中也可以很容易的实现,这里我拿Guice+Ibatis举个例子。

 

1. Guice要支持aop,首先我们引入aopalliance.jar。

 

2. 声明自己的事务annotation

 

Java代码  
  1. package com.yingxia.server.common;   
  2.   
  3. import java.lang.annotation.ElementType;   
  4. import java.lang.annotation.Retention;   
  5. import java.lang.annotation.RetentionPolicy;   
  6. import java.lang.annotation.Target;   
  7.   
  8. @Target(ElementType.METHOD)   
  9. @Retention(RetentionPolicy.RUNTIME)   
  10. public @interface Transaction {   
  11. }  

 

3. 声明切面事务拦截器TransactionInterceptor

 

Java代码  
  1. package com.yingxia.server.common;   
  2.   
  3. import org.aopalliance.intercept.MethodInterceptor;   
  4. import org.aopalliance.intercept.MethodInvocation;   
  5.   
  6. public class TransactionInterceptor implements MethodInterceptor {   
  7.   
  8.     @Override  
  9.     public Object invoke(MethodInvocation mi) throws Throwable {   
  10.         Object obj = null;   
  11.         try {   
  12.             BaseDao.sqlMapper.startTransaction();   
  13.             System.out.println("事务开始");   
  14.             obj = mi.proceed();   
  15.             BaseDao.sqlMapper.commitTransaction();   
  16.             System.out.println("事务提交");   
  17.         } finally {   
  18.             BaseDao.sqlMapper.endTransaction();   
  19.             System.out.println("事务结束");   
  20.         }   
  21.         return obj;   
  22.     }   
  23.   
  24. }   

4. 最后把拦截器绑定到Guice全局的Injector当中。这里请注意静态引入import static。bindInterceptor方法的前两个参数一个是用来过滤类,一个用来过滤方法。好了,这样你所有GuiceRemoteServiceServlet类的子类的带有Transaction标注的方法都将被纳入事务管理了。

 

Java代码
  1. private static final Injector injector = Guice.createInjector(new Module() {   
  2.   
  3.     @Override  
  4.     public void configure(Binder binder) {   
  5.            
  6.         binder.bindInterceptor(   
  7.             subclassesOf(GuiceRemoteServiceServlet.class),    
  8.             any(),   
  9.             new ExceptionInterceptor()   
  10.         );   
  11.            
  12.         binder.bindInterceptor(   
  13.             subclassesOf(GuiceRemoteServiceServlet.class),    
  14.             annotatedWith(Transaction.class),   
  15.             new TransactionInterceptor()   
  16.         );   
  17.     }   
  18. });  

扫描二维码推送至手机访问。

版权声明:本文由Ant.Master's Blog发布,如需转载请注明出处。

本文链接:https://iant.work/post/219.html

标签: JavaServer Page
分享给朋友:

“利用Guice的Aop实现切面事务管理” 的相关文章

JBoss,Tomcat 中文URL支持方法

JBOSS 找到jboss4的deploy\jbossweb-tomcat50.sar\server.xml,编辑该文件,在下面的XML节点中增加红色的字<Connector port="8080" address="${jboss.bind.address}"  &nbs...

在web.xml不认<taglib>解决办法

在web.xml不认<taglib>解决办法: 如果是头是这样的<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application&n...

struts,ajax乱码解决方案

乱码问题好像跟我们中国程序员特别有缘,一直困扰着我们,从开始的JSP乱码问题,STRUTS乱码问题,到现在的AJAX乱码问题,无一不是搞得许多程序员焦头烂额的,整天骂XXX产品对中文支持不了,UTF-8无法使用中文啊什么的,其实这里面被骂的产品中其实99%以上是对中文支持非常好的,而出现乱码的原...

JSP动态include与静态include的区别

动态INCLUDE   jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。静态INCLUDE   用include伪码实现,定不会检...

浏览网页时的错误代号

① 客户方错误    100  继续    101  交换协议  ② 成功    200  OK    201  已创建 &nbs...

用java把google和baidu的URL编码还原成明文字串ZT

因为在做链接来源统计的时候需要把 http://www.baidu.com/baidu?word= ... B%F7&tn=myie2dg  这类的URL编码还原成明文字串,一般大部分的网站都是用普通的URL编码形式,如上面链接中的badu,这种很容易转换和还原,Java...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。