2013-04-16 11 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 एनोटेशन का उपयोग कर सकते हैं। आप सदस्य @ नॉनबाइंडिंग को एनोटेट करके कंटेनर को क्वालीफायर प्रकार के सदस्य को अनदेखा करने के लिए मजबूर कर सकते हैं। निम्नलिखित उदाहरण देखें:

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

यहां @PayBy क्वालीफायर द्वारा सेम मिलान करते समय टिप्पणी को अनदेखा कर दिया जाएगा। इसका वर्णन करने वाले सीडीआई दस्तावेज का संदर्भ here पाया जा सकता है।

संबंधित मुद्दे