Я не знаю, если это менее уродливо, но вы могли бы ввести аннотацию @NoSetter и использовать ее в другом pointcut noSetter
до исключить методы, такие как setup(...)
, где вы не хотитепримененный аспект:
public pointcut noSetter(Item item) :
target(item)
&& execution(void @NoSetter Item+.*(..));
Измените pointcut setter
следующим образом:
public pointcut setter(Item item) :
target(item)
&& execution(void Item+.set*(*))
&& !noSetter();
Я использовал этот подход в ситуации, когда методы сеттера должны были запускать определенное событие.Мы не могли сгенерировать код, и делать это вручную было слишком утомительно и подвержено ошибкам.Кроме того, на некоторых установщиках событие должно было явно не запускаться вообще.
[Вышеприведенный синтаксис не проверен, сейчас у меня нет IDE, чтобы это проверить]