6

有没有办法创建一个拦截器限定符注释,忽略注释字符串值进行限定?

例如:

日志.java

@Inherited
@InterceptorBinding
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
    String value() default ""; // <---- ignore this
}

日志拦截器.java

@Log
@Interceptor
public class LogInterceptor implements Serializable {

    ...
}

用法.java

@Log("message for this log")
public String interceptedMethod(String param) {
    ...
}

这不起作用,因为注释value("message for this log")用作限定符,但我想使用value()不是作为限定符,而是消息日志。

4

1 回答 1

12

您可以为此目的使用 @Nonbinding 注释。您可以通过注释成员@Nonbinding 强制容器忽略限定符类型的成员。看下面的例子:

@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER, TYPE})
public @interface PayBy {
   PaymentMethod value();
   @Nonbinding String comment() default "";
}

在这里,当 @PayBy 限定符匹配 bean 时,注释将被忽略。可以在此处找到对描述此内容的 CDI 文档的参考。

于 2013-04-17T09:45:07.570 回答