Я впервые начинаю работать с АОП.
Мой первый аспект выглядит следующим образом:
@Aspect
public class SyncLoggingAspect {
private final Logger logger = Logger.getLogger(this.getClass());
@Before("execution(public * *(..))")
public void anyPublic() {
System.out.println("HIT POINTCUT");
}
}
Он успешно запускается при любом общедоступном вызове метода. Однако, когда я изменил его на это:
@Before("execution(public * doPoll(..))")
public void anyPublic() {
System.out.println("HIT POINTCUT");
}
Я ожидал, что он будет работать с любым общедоступным методом, называемым "doPoll", но когда вызывается такой метод, как этот, ничего не происходит:
public class GmailContactPoller extends ContactPoller<GoogleUser, ContactPusher<GoogleUser>> {
Logger logger = Logger.getLogger(this.getClass());
@Override
public List<? extends ContactPusher<GoogleUser>> doPoll() throws PollException {
...
}
}
Есть ли что-то, чего мне не хватает в EL синтаксис? Или это как-то связано с иерархией наследования? Метод суперкласса doPoll является абстрактным в абстрактном классе, называемом Poller. Не вызывает ли проблем отсутствие интерфейса?
Редактировать : Я только что заметил, что моя IDE поддерживает инструменты аспекта Spring, и теперь у меня есть следующее предупреждение компилятора с помощью метода:
"Описание Тип местоположения пути к ресурсам" совет, определенный в datasync.aop.aspects.SyncLoggingAspect не был применен [Xlint: adviceDidNotMatch] SyncLoggingAspect.java / DataSync / src / main / datasync / aop / sizes "