春天AOP。与目标的一次交易中的建议

时间:2015-10-08 14:39:16

标签: java spring transactions aspectj spring-aop

我有春天方面

@Aspect
@Component
public class SomeAspect

使用服务方法的@Around建议

@Around("execution(* some.pack.SomeService.someMethod(..))")
    public Object triggerSome(ProceedingJoinPoint pjp) throws Throwable {
        //pre-processing
        Object res = pjp.proceed();
        additionalService.additionalAction();
        return res;
    }

所有方法(SomeService.someMethod和AdditionalService.additionalAction)都是@Transactional方法。我搜索解决方案以在一个事务中执行此方法。当[aditionalAction]方法失败时,[someMethod]添加的更改必须回滚。

将@Transactional注释添加到advice方法不起作用。使用@Order注释来配置事务管理器和方面并不能满足我的需要。

是否可以在一个事务中调用此方法?

1 个答案:

答案 0 :(得分:-1)

服务上添加第三种方法,并将其标记为@Transactional

@Transactional
Object thirdMethod(){
   Object res = pjp.proceed();
   additionalService.additionalAction();
   return res;
}

并从您的Aspect中调用它:

    @Around("execution(* some.pack.SomeService.someMethod(..))")
    public Object triggerSome(ProceedingJoinPoint pjp) throws Throwable {
        //pre-processing
        return thirdMethod();
    }
相关问题