Чтение свойства аннотации в аспекте

Как считать значение свойства аннотации в аспекте?

Я хочу, чтобы мой Вокруг совета был выполнен для всех совместных точек, аннотируемых @Transactional (readonly=false).

@Around("execution(* com.mycompany.services.*.*(..)) "
+ "&& @annotation(org.springframework.transaction.annotation.Transactional)")
public Object myMethod(ProceedingJoinPoint pjp) throws Throwable {
}
5
задан Bozho 23 March 2010 в 12:23
поделиться

2 ответа

Таким образом, вы можете сделать это без ручной обработки подписи ( argNames используется для сохранения имен аргументов при компиляции без отладочной информации):

@Around(
    value = "execution(* com.mycompany.services.*.*(..)) && @annotation(tx)",
    argNames = "tx") 
public Object myMethod(ProceedingJoinPoint pjp, Transactional tx) 
    throws Throwable {
    ...
} 

См. 7.2.4.6 Параметры совета

5
ответ дан 13 December 2019 в 19:24
поделиться

вам нужно будет сделать это в коде. Например,

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
}

Но вы действительно уверены, что хотите возиться с обработкой транзакций?

3
ответ дан 13 December 2019 в 19:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: