具有注释参数的aspectj切入点

时间:2011-02-07 14:43:26

标签: aspectj

我使用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 

2 个答案:

答案 0 :(得分:16)

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

这不正确,@annotation()需要参数名称,而不是参数类型。

如果您的类是使用调试代码编译的,则切入点参数必须与方法参数具有相同的名称,否则,您需要依赖于唯一的参数类型或使用{{显式写出参数名称1}}参数:

argNames

参考:

答案 1 :(得分:5)

我一直在玩,发现以下工作

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