Автономная версия класса AnnotationLiteral? - PullRequest
3 голосов
/ 16 августа 2011

Среда CDI (Context Dependency Injection) содержит потрясающий класс javax.enterprise.util.AnnotationLiteral, который позволяет очень легко создать экземпляр аннотации (особенно полезной для тестов).

Iхочу использовать этот класс утилит в моей собственной библиотеке.Но так как моя библиотека не имеет ничего общего с CDI, я не хочу иметь все остальные вещи CDI.К счастью, AnnotationLiteral не использует никакие другие классы, кроме стандартных классов Java, поэтому это должно быть вообще возможно.

До сих пор самая маленькая библиотека, которая содержит AnnotationLiteral, является официальным CDI-API

<dependency>
   <groupId>javax.enterprise</groupId>
   <artifactId>cdi-api</artifactId>
   <version>1.0</version>
</dependency>

Но даже если я отрежу все зависимости (исключая maven), jar будет содержать много других CDI-API и -SPI.

Поэтому мой вопрос:уже есть какая-то (более или менее официальная) (maven) библиотека, которая содержит только класс util.AnnotationLiteral или, по крайней мере, не так много других вещей?

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Лицензионную версию Apache AnnotationLiteral можно найти в geronimo api . Похоже, что он не имеет каких-либо зависимостей от других частей CDI. Если вам не нужна реализация equals и hashCode, которую она обеспечивает в ваших тестах, вы даже можете напрямую реализовать интерфейс аннотаций. Это не очень хороший стиль, но определенно возможно. Для CDI необходима дополнительная реализация equals и hashCode для логики Qualifier. Вот пример использования аннотации jsf ManagedBean:

public static ManagedBean test = new ManagedBean() {
    @Override
    public String name() {
        return "test";
    }

    @Override
    public boolean eager() {
        return false;
    }

    @Override
    public Class<? extends Annotation> annotationType() {
        return ManagedBean.class;
    }  
};
1 голос
/ 16 августа 2011

Если вы соблюдаете условия лицензии, вы можете скопировать источник в ваш проект.

Если это возможно, я бы сохранил имя пакета, если CDI в конечном итоге станет зависимостью проекта. Единственная причина, по которой я бы изменил пакет, - это если вы решите изменить исходный код, что, конечно, не означает, что вы можете удалить лицензию.

...