2013-04-16 16 views
5

Esiste un modo per creare un'annotazione del qualificatore intercettore che ignori il valore della stringa di annotazione per la qualifica?Crea qualificatore dell'intercettore che ignora il valore di annotazione()

ad esempio:

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

Questo non funziona perché l'annotazione value("message for this log") funziona come qualificatore ma voglio usare lo value() non come qualificatore, ma registro messaggi.

risposta

9

È possibile utilizzare l'annotazione @Nonbinding a tale scopo. È possibile forzare il contenitore a ignorare un membro di un tipo di qualificatore annotando il membro @Nonbinding. Guardate il seguente esempio:

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

Ecco il commento verrà ignorato in caso di corrispondenza fagioli dal qualificatore @PayBy. Un riferimento alla documentazione CDI che descrive questo può essere trovato here.