我有以下注释:
public @interface Log {
int id() default 0;
}
现在,我想在advice方法中访问id字段。例如,如果我调用foo,则应该打印它的id(1)。
@Log(id = 1)
public void foo() {}
到目前为止,我已经得到了这个:
@Pointcut("@annotation(com.skyfall.aspects.Log)")
public void logPointcut(com.skyfall.aspects.Log log) {}
@Before("logPointcut(log))")
public void logBefore(JoinPoint joinPoint, com.skyfall.aspects.Log log) {
System.out.println(log.id());
}
但是,我在使用@annotation(注释类型(注释字段))时出现错误说明注释字段必须绑定"
答案 0 :(得分:1)
您的代码应该是这样的,因为您正在使用带有绑定表单格式的切入点,其中您只使用参数名称,并且注释的类型取自logBefore
方法:
@Pointcut("@annotation(log)")
public void logPointcut(com.skyfall.aspects.Log log) {}
@Before("logPointcut(log))")
public void logBefore(JoinPoint joinPoint, com.skyfall.aspects.Log log) {
System.out.println(log.id());
}