Spring - 在Advice中访问注释的参数

时间:2014-06-30 09:45:54

标签: java spring annotations

我有以下注释:

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(注释类型(注释字段))时出现错误说明注释字段必须绑定"

1 个答案:

答案 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());
}