У меня есть реализация службы, несущая общеобязательную аннотацию @Transactional. У меня также есть аспект, который использует совет @Around для повторения неудачных транзакций. Я сейчас пытаюсь (по причинам, типа безопасности), чтобы сделать пометку определения на основе: срез точекПодсчет точек привязки Spring AOP для ElementType.TYPE?
@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);
}
есть ли возможность доступа к значению аргумента аннотации, если она была какая-то? – user1050755
можно сделать pjp.getTarget(). GetClass(). GetAnnotation (TransactionRetryable.class) .value() ... – user1050755