Как сопоставить метод с аннотированным аргументом в AspectJ - PullRequest
2 голосов
/ 26 августа 2011

Я хотел бы сопоставить метод, подобный этому:

@Foo
public void boo(@Baz Bar bar) { ... }

В основном:

  • метод имеет аннотацию @Foo (которую я сопоставляю с execution(@Foo * *(..)) && @annotation(foo)),
  • может иметь переменное количество параметров,
  • , и один из них должен иметь аннотацию @Baz,
  • Мне нужно продолжить работу с этим аннотированным аргументом (bar).

Если у метода есть аннотация @Foo, но отсутствует аннотация @Baz, я хочу получить ошибку как можно раньше, если это возможно при ткачестве, а не во время выполнения.

Как я могу это сделать?

1 Ответ

2 голосов
/ 26 августа 2011
public pointcut annArg(): execution(@Foo * *(.., @Baz (*),..));

declare error :execution(@Foo * *(..))&&!annArg() :"error";

К сожалению, невозможно получить совпадающий аргумент с помощью аргументов (.., arg, ..). Но вы можете использовать thisJoinPoint.getArgs () и API отражения, чтобы получить аннотированный аргумент. Или, если вы знаете позицию аргумента, вы можете использовать что-то вроде args (.., arg);

...