分享

Spring AOP嵌套顺序 - Spring - Java - ITeye论坛

 ~水手~!! 2011-05-17
先描述一下这个问题的应用场景,有如下一个业务方法,我们需要AOP来切这个业务方法,
Java代码 复制代码 收藏代码
  1. public interface FooService {   
  2.     public void saveFoo(String name, int age);   
  3. }  
在切入FooService业务方法的Aop Aspect中,我们要调用JBPM中一些方法推动流程,因此会有持久化的操作,
Java代码 复制代码 收藏代码
  1. public class WorkFlowService {   
  2.     public Object completeTask(ProceedingJoinPoint call,    
  3. String name, int age) throws Throwable {   
  4.         //......   
  5.         //Invoke JBPM method   
  6.         //......   
  7.         return call.proceed();   
  8.     }   
  9. }  
对于FooService,我们配置Spring事务管理来管理关于持久化的操作,问题来了,在执行FooService的saveFoo方法时,从控制台的日志看出Spring开启一个事务,saveFoo方法结束时,关闭了此事务,在调用completeTask进行JBPM操作时,Spring又开启了另外一个事务,我们希望的是saveFoo和completeTask在同一个事务中,因为Spring事务管理也是AOP的应用,如果方法调用流程如下
引用
Transaction AOP Begin Transaction
        WorkFlowService AOP Invoke completeTask before
             FooService Invoke saveFoo
        WorkFlowService AOP Invoke completeTask after
Transaction AOP Commit Transaction

那就需要Spring的事务AOP在最外层,就可以保证一个事务,所以就需要指定Spring AOP嵌套顺序,order数值越小就在更外层
Xml代码 复制代码 收藏代码
  1. <aop:aspect order="10">  
  2.         ......   
  3. </aop:aspect>  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多