Подтвердить что ты не робот

Aspectcut pointcut с параметрами аннотации

Я использую aspectj для перехвата методов, которые аннотируются с помощью @Profile(description="something")

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Profile {
    public String description() default "";
}

@Around("com.merc.aop.ctw.aspect.PointcutDefinitions.logAnnotatedMethods(profile)")
public Object profile(ProceedingJoinPoint pjp, Profile profile) throws Throwable {
    ....
}

@Pointcut("@annotation(com.merc.annotations.Profile)")
protected void logAnnotatedMethods(Profile profile) {
}

Но при компиляции с использованием AJC

я получаю сообщение об ошибке:
formal unbound in pointcut 
4b9b3361

Ответ 1

@Pointcut("@annotation(com.merc.annotations.Profile)")
protected void logAnnotatedMethods(Profile profile) {
}

Это неверно, @annotation() хочет имя параметра, а не тип параметра.

Если ваш класс скомпилирован с кодом отладки, параметр pointcut должен иметь то же имя, что и параметр метода, если нет, вам нужно либо полагаться на уникальные типы параметров, либо явно выписывать имена ваших параметров, используя argNames:

@Pointcut(value="@annotation(profile)",argNames="profile")
protected void logAnnotatedMethods(Profile arg) {    }

Ссылка:

Ответ 2

Я играл и обнаружил, что следующие работы

@Pointcut("@annotation(profile)")
protected void logAnnotatedMethods(Profile profile) {
}