2012-11-15 14 views
19

एक साल या तो मैंने एक लेख पढ़ा जो समझाया कि मैं एक एनोटेशन कैसे बना सकता हूं जो मूल रूप से अन्य एनोटेशन के लिए एक कंटेनर है। इस तरह यदि मैं हमेशा एक विशिष्ट उपयोग-मामले में एक ही 5 एनोटेशन का उपयोग करता हूं तो मैं एक एनोटेशन बनाता हूं जिसमें उन्हें शामिल किया जाता है और इसके बजाय इसका उपयोग किया जाता है।एनोटेशन का समूह कौन सा एनोटेशन बनाने के लिए?

दुर्भाग्यवश, मुझे अब लेख नहीं मिल रहा है और वास्तव में मेरे जैक्सन कॉन्फ़िगरेशन के लिए ऐसा करना पसंद करेंगे।

चूंकि मुझे उस पर कोई जानकारी नहीं मिल रही है, इसलिए मैं अपनी याददाश्त पर सवाल उठाना शुरू कर रहा हूं। क्या यह संभव है या मैं गलत हूँ?

@Target(ElementType.METHOD) 
@com.fasterxml.jackson.databind.annotation.JsonSerialize(using=MySerializerThatIsUsedEverywhere.class 
@javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter(MyCustomXmlAdapter.class) 
@SomeOtherEvaluatedByTheSerializer 
public @interface SerializerUseCase01 { 
    public String a(); 
    public int b(); 
) 

मेरी परिदृश्य मैं क्रमबद्धता उपयोग के मामलों है कि विभिन्न कॉन्फ़िगरेशन के साथ एक ही serializer द्वारा नियंत्रित किया जा सकता का एक समूह है कि है:

संपादित

क्या मैं चाहता हूँ की तरह कुछ है। सब कुछ आसान बनाने के लिए और अधिक पारदर्शी बनाने के लिए मैं जैक्सन कॉन्फ़िगरेशन और सीरियलाइज़र कॉन्फ़िगरेशन को एक एनोटेशन में लपेटना चाहता हूं।

उत्तर

15

जैक्सन के लिए, यह @JacksonAnnotationsInside मेटा-टिप्पणी के साथ किया जा सकता है। अधिक के लिए this article, लेकिन कोड स्निपेट देखें से होती है:

@Retention(RetentionPolicy.RUNTIME) // IMPORTANT 
@JacksonAnnotationsInside 
@JsonInclude(Include.NON_NULL) 
@JsonPropertyOrder({ "id", "name" }) 
public @interface MyStdAnnotations 

और उस पर से तुम इतने तरह अपनी खुद की कक्षाओं के लिए इस प्रकार का उपयोग कर सकते हैं:

@MyStdAnnotations 
public class MyBean { 
    public String name, id; 
} 
2

कुछ उदाहरण here हैं जो अन्य एनोटेशन वाले एनोटेशन के विभिन्न संयोजनों को कैसे बनाते हैं। क्या आप यही खोज रहे हैं? स्रोत से

उदाहरण:

@Target(ElementType.METHOD) 
public @interface SimpleAnnotation { 
    public String a(); 
    public int b(); 
) 

@Target(ElementType.METHOD) 
public @interface ReallyComplexAnnotation { 
    public SimpleAnnotation[] value(); 
) 

इस तरह उपयोग किया:

@ReallyComplexAnnotation(
    { @SimpleAnnotation(a="...", b=3), @SimpleAnnotation(a="...", b=4) } 
) 
+0

मैं आशा मेरे संपादन में थोड़ा और अधिक सब कुछ बनाया – Laures

+0

हम्म साफ़ करें। तो आप 'SerializerUseCase01' को अन्य के समूह (एक कार्यान्वयन विस्तार के रूप में छुपा) इंटरफेस के लिए उपनाम के समान कुछ होना चाहते हैं, क्या यह सही है? – Thor84no

+0

सही। लेकिन मुझे यकीन नहीं है कि यह संभव है क्योंकि एनोटेशन में से कोई भी मुझे "छिपाना" नहीं चाहता है, '@ लक्ष्य ({ElementType.ANNOTATION_TYPE, ...} ' – Laures