2013-04-16 16 views
5

Czy istnieje sposób tworzenia adnotacji kwalifikatora przechwytywania, który ignoruje wartość ciągu adnotacji do kwalifikacji?Utwórz kwalifikator przechwytywania ignorujący wartość adnotacji()

na przykład:

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) { 
    ... 
} 

To nie działa, ponieważ adnotacja value("message for this log") działa jako kwalifikator, ale chcę użyć value() nie jako kwalifikatora, ale dziennika wiadomości.

Odpowiedz

9

Możesz użyć adnotacji @Noninding w tym celu. Możesz zmusić kontenera do zignorowania członka typu kwalifikatora, dodając adnotację do elementu @Nonbinding. Spójrz na następujący przykład:

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

Tutaj komentarz zostanie zignorowany podczas dopasowywania ziaren przez kwalifikator @PayBy. Odwołanie do opisującej to dokumentacji CDI można znaleźć pod adresem here.

Powiązane problemy