Создайте спецификатор перехватчика, который игнорирует значение аннотации ()
Есть ли способ создать аннотацию квалификатора-перехватчика, которая игнорирует значение строки аннотации для квалификации?
например:
Log.java
@Inherited
@InterceptorBinding
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
String value() default ""; // <---- ignore this
}
LogInterceptor.java
@Log
@Interceptor
public class LogInterceptor implements Serializable {
...
}
Usage.java
@Log("message for this log")
public String interceptedMethod(String param) {
...
}
Это не работает, потому что аннотация value("message for this log")
работает как классификатор, но я хочу использовать value()
не как классификатор, а журнал сообщений.
1 ответ
Решение
Вы можете использовать аннотацию @Nonbinding для этой цели. Вы можете заставить контейнер игнорировать член типа квалификатора, комментируя член @Nonbinding. Посмотрите на следующий пример:
@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER, TYPE})
public @interface PayBy {
PaymentMethod value();
@Nonbinding String comment() default "";
}
Здесь комментарий будет игнорироваться при сопоставлении bean-компонентов квалификатором @PayBy. Ссылка на документацию CDI, описывающую это, может быть найдена здесь.