@AspectJ pointcut для всех методов класса с определенной аннотацией

Я хочу контролировать, все открытые методы всех Классов с указанной аннотацией (скажите что @Monitor) (примечание: Аннотация на уровне класса). Каков мог быть возможный pointcut для этого?Примечание: Я использую AOP Spring стиля @AspectJ.

117
задан Rejeev Divakaran 6 January 2010 в 05:17
поделиться

2 ответа

[

]Что-то вроде этого:[

] [
@Before("execution(* com.yourpackage..*.*(..))")
public void monitor(JoinPoint jp) {
    if (jp.getTarget().getClass().isAnnotationPresent(Monitor.class)) {
       // perform the monitoring actions
    }
}
] [

]Заметьте, что у вас не должно быть других советов по этому же классу []до [] этого, потому что аннотации будут потеряны после проксирования.[

].
13
ответ дан 24 November 2019 в 02:06
поделиться

Вы должны комбинировать тип pointcut с методом pointcut.

Эти pointcut выполнят работу по поиску всех общедоступных методов внутри класса, отмеченного аннотацией @Monitor:

@Pointcut("within(@org.rejeev.Monitor *)")
public void beanAnnotatedWithMonitor() {}

@Pointcut("execution(public * *(..))")
public void publicMethod() {}

@Pointcut("publicMethod() && beanAnnotatedWithMonitor()")
public void publicMethodInsideAClassMarkedWithAtMonitor() {}

Посоветуйте последний pointcut, который объединяет первые два, и все готово!

Если вам интересно, я написал шпаргалку со стилем @AspectJ здесь с соответствующим примером документа здесь.

151
ответ дан 24 November 2019 в 02:06
поделиться
Другие вопросы по тегам:

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