2013-04-16 6 views
5

Gibt es eine Möglichkeit, eine Interceptor-Qualifikationsmerkmal-Annotation zu erstellen, die den Annotationstring-Wert für die Qualifizierung ignoriert?Interceptor-Qualifikationsmerkmal erstellen, das Annotationswert ignoriert()

zum Beispiel:

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

Das funktioniert nicht, weil die Annotation value("message for this log") als Qualifier funktioniert, aber ich möchte die value() nicht als Qualifier verwenden, aber Meldungslog.

Antwort

9

Sie können die Annotation @Nonbinding für diesen Zweck verwenden. Sie können erzwingen, dass der Container ein Mitglied eines Qualifikationsmerkmaltyps ignoriert, indem er das Mitglied @Nonbinding annotiert. Schauen Sie sich das folgende Beispiel:

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

Hier wird der Kommentar ignoriert werden, wenn Bohnen von dem @PayBy Qualifier entspricht. Ein Verweis auf die CDI-Dokumentation, die dies beschreibt, finden Sie unter here.

Verwandte Themen