论坛首页 Java企业应用论坛

Spring AOP嵌套顺序

浏览 2808 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-05-17   最后修改:2011-05-17
先描述一下这个问题的应用场景,有如下一个业务方法,我们需要AOP来切这个业务方法,
public interface FooService {
    public void saveFoo(String name, int age);
}
在切入FooService业务方法的Aop Aspect中,我们要调用JBPM中一些方法推动流程,因此会有持久化的操作,
public class WorkFlowService {
    public Object completeTask(ProceedingJoinPoint call, 
String name, int age) throws Throwable {
        //......
        //Invoke JBPM method
        //......
        return call.proceed();
    }
}
对于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数值越小就在更外层
<aop:aspect order="10">
        ......
</aop:aspect>
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics