我有一个服务实现,它带有一个类范围的@Transactional注释。我还有一个方面使用@Around建议来重试失败的事务。我现在正在尝试(出于类型安全的原因)基于切入点定义注释:
@Around("@annotation(TransactionRetryable)")
TransactionRetryable.java:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface TransactionRetryable {
}
服务层:
@Transactional
public class ... {
@Override
@TransactionRetryable
public String forceError() {
throw new RuntimeException(someNastyMessage);
}
在该形式中,它仅适用于方法,而不适用于整个类。但是,@ Transactional注释从类级别传播到每个方法。有没有办法避免将@TransactionRetryable注释放在每个方法之上,而只是在类之上,就像@Transactional注释一样?期望的形式:
@Transactional
@TransactionRetryable
public class ... {
@Override
public String forceError() {
throw new RuntimeException(someNastyMessage);
}
答案 0 :(得分:2)
此切入点会建议使用@TransactionRetryable
注释的类的所有公共方法:
@Around("execution(public * *(..)) && within(@your.package.TransactionRetryable *)")