2013-04-16 4 views
5

Есть ли способ создать аннотацию классификатора перехватчика, которая игнорирует значение строки аннотации для квалификации?Создать квалификатор перехватчика, который игнорирует значение аннотации()

, например:

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() не как квалификатор, а журнал сообщений.

ответ

9

Вы можете использовать аннотацию @Nonbinding для этой цели. Вы можете заставить контейнер игнорировать элемент типа классификатора, аннотируя элемент @Nonbinding. Посмотрите на следующий пример:

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

Здесь комментарий будет проигнорирован при сопоставлении бобов в классификаторе @PayBy. Ссылка на документацию CDI, описывающую это, можно найти here.

Смежные вопросы