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();
}
我有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();
}