我使用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
答案 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) {
}