Aspectj соответствует pointcut, не заботясь о параметрах аннотации на уровне метода

Я поставил себя в тупик с проблемой, связанной с Aspectj. То, что я хочу сделать, - это совпадение "выброса after()" с вызовом, аннотированным аннотацией на уровне метода.

@MyAnnotation    
public void doSomething(Param p1, Param p2)

Если я использую

after() throwing(MyCustomException ex) : call (@com.me.MyAnnotation * *.*(..))

Это работает, однако, если я добавлю некоторые параметры в свою аннотацию, они не будут сопоставляться.

@MyAnnotation(value = "doobery")    
public void doSomething(Param p1, Param p2)

Что мне не хватает в моем pointcut ??

Просто чтобы уточнить, я хотел бы сопоставить оба примера, и мне не нужны параметры в аннотации.

Версия AspectJ 1.6


person James 'Cookie' Cook    schedule 05.12.2012    source источник
comment
Какую версию AspectJ вы используете?   -  person Frank Pavageau    schedule 06.12.2012
comment
Полная версия была бы еще более полезной :-) В последних версиях была проведена некоторая работа с параметрами аннотаций, так что это может оказать влияние, поскольку оно должно работать так, как вы его написали. Если вы не получите ответа здесь, вы обязательно получите его в списке рассылки для пользователей аспектов.   -  person Frank Pavageau    schedule 06.12.2012
comment
1.6.12 - Что интересно, я включил отладку переплетения, и я могу, что некоторые методы в классе переплетаются, тогда как другие игнорируются. Поиск продолжается.   -  person James 'Cookie' Cook    schedule 06.12.2012


Ответы (1)


Ха! понятно.

Таким образом, подсказка заключалась в том, чтобы увидеть след того, что было соткано. Я мог видеть, как некоторые методы сплетаются, а другие нет. Но это было дублирование переплетения методов, через которое я прорвался.

Я использовал «вызов». Таким образом, переплетение происходило только при вызовах метода, поэтому, когда у меня был класс, переплетенный с несколькими вызовами соответствующих методов, они появлялись несколько раз.

Мне нужно было переключиться на «выполнение», чтобы переплетение происходило на методах, даже если они не вызывались.

Изменил мой совет на:

after() throwing(MyCustomException ex) : execution (@com.me.MyAnnotation * *(..))
person James 'Cookie' Cook    schedule 05.12.2012
comment
Да, извините. Детали часто упускаются из виду, когда это ваша проблема, и вы забыли свои собственные предположения, которые другие могут не сделать! - person James 'Cookie' Cook; 06.12.2012