2012-11-15 54 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(); 
) 

我的情況是,我有一堆可以通過與不同CONFIGS相同的串行處理序列化的用例。爲了使一切更容易使用和更透明,我想將jackson配置和序列化器配置封裝到一個註釋中。

回答

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

正確。但我不確定這是可能的,因爲沒有任何我想「隱藏」的註釋標記爲「@Target({ElementType.ANNOTATION_TYPE,...}」。 – Laures