2012-11-15 81 views
19

Một năm hoặc lâu hơn, tôi đọc một bài viết giải thích cách tôi có thể tạo chú thích về cơ bản là một vùng chứa cho các chú thích khác. Bằng cách này, nếu tôi luôn sử dụng cùng một 5 chú thích trong một trường hợp sử dụng cụ thể, tôi tạo chú thích có chứa chú thích và sử dụng chú thích đó.Cách tạo chú thích là một nhóm chú thích?

Thật không may, tôi không thể tìm thấy bài viết nữa và thực sự muốn làm điều đó ngay bây giờ cho cấu hình jackson của tôi.

Vì tôi không thể tìm thấy bất kỳ thông tin nào về điều đó một mình, tôi bắt đầu đặt câu hỏi về bộ nhớ của mình. Điều này có thể hay tôi chỉ là sai?

EDIT

gì tôi muốn là một cái gì đó như:

@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(); 
) 

kịch bản của tôi là tôi có một loạt các trường hợp sử dụng serialization có thể được xử lý bởi các serializer cùng với configs khác nhau. Để làm cho mọi thứ dễ sử dụng hơn và minh bạch hơn, tôi muốn bọc cấu hình jackson và cấu hình serializer thành một chú thích.

Trả lời

15

Đối với Jackson, điều này có thể được thực hiện với @JacksonAnnotationsInside meta-chú thích. Xem this article cho hơn, nhưng đoạn mã từ đó là:

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

và từ bản bạn có thể sử dụng loại này cho các lớp học của riêng bạn như vậy:

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

Có một số ví dụ here về cách thực hiện các kết hợp khác nhau của chú thích chứa các chú thích khác. Đây có phải là những gì bạn đang tìm kiếm không?

Ví dụ từ nguồn:

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

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

Được sử dụng như thế này:

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

tôi hy vọng chỉnh sửa của tôi làm tất cả mọi thứ hơn một chút rõ ràng – Laures

+0

Hmm. Vì vậy, bạn muốn 'SerializerUseCase01' là một cái gì đó giống như một bí danh cho một bó khác (ẩn như một chi tiết thực hiện) giao diện, đó là chính xác? – Thor84no

+0

Chính xác. Nhưng tôi không chắc chắn nữa là có thể vì không có chú thích nào tôi muốn "ẩn" được đánh dấu bằng '@Target ({ElementType.ANNOTATION_TYPE, ...}'. – Laures