Weave AspectJ аспект в зависимост от анотациите на ограниченията

Бих искал да напиша аспект на AspectJ, който защитава всички методи на нашите Java класове, които имат ограничение за проверка на javax. т.е. за следния код

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

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

  void doSomethingElse(String message) {
  }
}

'before' pointcut трябва да се използва за метода 'doSomething', но не и за метода 'doSomethingElse'. Следователно pointcut трябва да се прилага за всички методи, които съдържат поне един параметър с анотация, която сама по себе си има анотацията @Constraint.

Как може да се изрази такъв pointcut с AspectJ?


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


Отговори (1)


Ето точка, която ще съпостави извикване на такъв метод:

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

Забележка: Ако сте абсолютно сигурни, че поясненият параметър ще бъде първият (съответно последният) параметър, тогава можете да изпуснете първите (съответно последните) двойни точки.

person XGouchet    schedule 28.07.2016