Выражение pointcut AspectJ соответствует аннотациям параметров в любой позиции

Я пытаюсь определить выражение pointcut для сопоставления методов, которые содержат параметр, аннотированный определенной аннотацией, независимо от того, в какой позиции находится параметр. В моем случае я ищу аннотацию @Constraint. Например:

Методы сопоставления:

public void method1(@Constraint Car car)

public void method2(String id, @Constraint Plane plane)

public void method3(Wheel wheel, @Constraint List<Train> trains, @Constraint Plane plane)

public void method4(Motor motor, @Constraint Set<Train> trains, Bicycle bike, Wheel wheel)

public void method5(Wing wing, Motorcycle moto, @Constraint Truck truck, Bicycle bike, Wheel wheel)

До сих пор я безуспешно пробовал следующие выражения:

@Before("execution(public * *.*(..)) and @args(com.example.Constraint)") // there can be only one parameter
@Before("execution(public * *.*(..)) and @args(..,com.example.Constraint)") // parameter must be in last position
@Before("execution(public * *.*(..)) and @args(com.example.Constraint,..)") // parameter must be in first position
@Before("execution(public * *.*(..)) and (@args(com.example.Constraint,..) or @args(..,com.example.Constraint))") // parameter must be in first or last position, nothing in between
@Before("execution(public * *.*(..)) and @args(..,com.example.Constraint,..)") // Invalid

Может ли кто-нибудь указать мне правильное решение? это вообще возможно?

16
задан ggreiner 1 August 2012 в 20:23
поделиться