Подтвердить что ты не робот

Как создать аннотацию, представляющую собой группу аннотаций?

Примерно через год я прочитал статью, в которой объяснялось, как я могу создать аннотацию, которая в основном представляет собой контейнер для других аннотаций. Таким образом, если я всегда использую те же 5 аннотаций в конкретном случае использования, я создаю аннотацию, содержащую их, и использую это вместо этого.

К сожалению, я больше не могу найти статью и хотел бы сделать это прямо сейчас для моей настройки Jackson.

Поскольку я не могу найти какую-либо информацию по этому поводу, я начинаю сомневаться в своей памяти. Возможно ли это, или я просто ошибаюсь?

ИЗМЕНИТЬ

Я хочу что-то вроде:

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

Мой сценарий заключается в том, что у меня есть куча сериализации, которые могут обрабатываться одним и тем же сериализатором с различными конфигурациями. Чтобы сделать все проще в использовании и более прозрачным, я хочу обернуть конфигурацию jackson и конфигурацию serializer в одну аннотацию.

4b9b3361

Ответ 1

Для Джексона это можно сделать с помощью мета-аннотации @JacksonAnnotationsInside. Подробнее см. в этой статье, но фрагмент кода:

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

и оттуда вы можете использовать этот тип для своих собственных классов:

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

Ответ 2

Ниже приведены примеры о том, как создавать различные комбинации аннотаций, содержащих другие аннотации. Это то, что вы ищете?

Пример из источника:

@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) }
)