Как считать значение свойства аннотации в аспекте?
Я хочу, чтобы мой Вокруг совета был выполнен для всех совместных точек, аннотируемых @Transactional (readonly=false).
@Around("execution(* com.mycompany.services.*.*(..)) "
+ "&& @annotation(org.springframework.transaction.annotation.Transactional)")
public Object myMethod(ProceedingJoinPoint pjp) throws Throwable {
}
Таким образом, вы можете сделать это без ручной обработки подписи ( argNames
используется для сохранения имен аргументов при компиляции без отладочной информации):
@Around(
value = "execution(* com.mycompany.services.*.*(..)) && @annotation(tx)",
argNames = "tx")
public Object myMethod(ProceedingJoinPoint pjp, Transactional tx)
throws Throwable {
...
}
вам нужно будет сделать это в коде. Например,
Signature s = pjp.getSugnature();
Method m = s.getDeclaringType().getDeclaredMethod(s.getName(), pjp.getArgs());
Transactional transactional = m.getAnnotation(Transactional.class);
if (transactional != null && !transactional.readOnly()) {
// code
}
Но вы действительно уверены, что хотите возиться с обработкой транзакций?