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

Spring AOP. Advice in one transaction with target

我有Spring方面

@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 注释无效。使用@Order 注释配置事务管理器和方面并没有满足我的需要。

是否可以在一次交易中调用此方法?

在您的 Service 上添加第三种方法并将其标记为 @Transactional

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

并从您的方面调用它:

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