Сплетение аспектов AspectJ в зависимости от аннотаций ограничений

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

@Target({METHOD})
@Retention(RUNTIME)
@Constraint
public @interface NiceMessage {
}

public class Sample {
  void doSomething(@NiceMessage String message) {
  }

  void doSomethingElse(String message) {
  }
}

pointcut «до» следует использовать для метода «doSomething», но не для метода «doSomethingElse». Таким образом, pointcut должен применяться ко всем методам, которые содержат хотя бы один параметр с аннотацией, которая сама имеет аннотацию @Constraint.

Как такой pointcut может быть выражен с помощью AspectJ?


person woelfle    schedule 20.08.2015    source источник


Ответы (1)


Вот pointcut, который будет соответствовать вызову такого метода:

@Pointcut("call(* *(.., @com.sample.NiceMessage (*), ..))")
public void pôintcutAnnotatedParam(JoinPoint jp) {
}

Примечание. Если вы абсолютно уверены, что аннотированный параметр будет первым (соответственно последним) параметром, вы можете убрать первые (соответственно последние) двойные точки.

person XGouchet    schedule 28.07.2016