AspectJ pointcut на переменную метода, это возможно? - PullRequest
5 голосов
/ 20 декабря 2010

Я уже некоторое время использую AspectJ, и он прекрасно работает с полями области объекта, содержащими аннотации.Я только что столкнулся с ситуацией, когда хочу аннотировать переменную области действия метода, которая будет работать с моим pointcut, но у меня возникли проблемы с ним.

Вот точка, которую я использую.Это прекрасно работает, если моя переменная является полем для объекта, но если я уменьшу область видимости до метода (переменная, объявленная внутри метода), то она больше не будет работать, и я не уверен, почему.Дайте мне знать, что я могу сделать, спасибо.

 after(final Trigger trigger): set(@Triggereable * *) && args(trigger)
 {
  System.out.println("trigger flush");
 }

Кроме того, вот пример того, что я хочу работать.Приведенный выше файл System.out.println должен срабатывать при создании экземпляра триггера:

public void foo()
{
   @Triggereable
   private Trigger trigger = new Trigger();
}

Ответы [ 2 ]

5 голосов
/ 20 декабря 2010

Если вы попали в такую ​​ситуацию, вы, вероятно, пытаетесь изменить реализацию, а не применять реальные сквозные проблемы.По сути, это не то, для чего предполагается использовать AOP и AspectJ.

В качестве обходного пути вы можете либо извлечь соответствующие функции в отдельный метод, а затем применить свои аспекты к этому методу, либо, наоборот, вы можетезамените весь метод на эту локальную переменную, используя около совета.

Более того, в вашем конкретном примере pointcut можно применить к выполнению конструктора в рамках данного метода, так что вы можете сделать практически то же самоевещь без привязки к локальной переменной.

1 голос
/ 20 декабря 2010

AspectJ в настоящее время не поддерживает pointcut для локальных переменных (прочитайте FAQ ).

Кажется, я вспоминаю недавнее обсуждение такой возможности, которая может быть добавлена ​​в ближайшее время, но я не смог найти ее ни в AspectJ трекере проблем , ни в архивах списка рассылки

...