Jakarta ee 创建忽略注释值()的侦听器限定符

Jakarta ee 创建忽略注释值()的侦听器限定符,jakarta-ee,java-ee-6,cdi,jboss-weld,qualifiers,Jakarta Ee,Java Ee 6,Cdi,Jboss Weld,Qualifiers,有没有一种方法可以创建一个拦截器限定符注释,忽略注释字符串值以进行限定 例如: Log.java @Inherited @InterceptorBinding @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface Log { String value() default ""; // <---- ignore this } @Log

有没有一种方法可以创建一个拦截器限定符注释,忽略注释字符串值以进行限定

例如:

Log.java

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

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

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

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

这不起作用,因为注释
值(“此日志的消息”)
可用作限定符,但我想使用
值()
不是限定符,而是消息日志。

您可以使用@Nonbinding注释。通过注释成员@Nonbinding,可以强制容器忽略限定符类型的成员。请看以下示例:

@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER, TYPE})
public @interface PayBy {
   PaymentMethod value();
   @Nonbinding String comment() default "";
}
在这里,当通过@PayBy限定符匹配bean时,注释将被忽略。 可以找到描述这一点的CDI文档参考