Возможно, наиболее полезным и используемым случаем аннотаций Java является использование аннотаций POJO + вместо файлов конфигурации xml.
Я использую их много, поскольку (как вы уже сказали), если вы используете веб-фреймворк (например, пружину или шов ) у них обычно есть множество аннотаций, которые могут вам помочь.
Недавно я написал несколько аннотаций для создания настраиваемой машины состояний, цели валидации и аннотаций аннотаций (используя его аспект метаданных). И ИМО, они очень помогают сделать код более чистым, простым для понимания и управления.
Текущий проект (200KLOC), аннотации, которые я использую все время:
@NotNull / @Nullabe
@Override
@Test
@Ignore
@ThreadSafe
@Immutable
Но я еще не написал свою собственную аннотацию ... Пока!
У нас есть конструктор отчетов как часть нашего веб-приложения. Пользователь может добавить большое количество виджетов, которые представляют собой небольшие вариации одного и того же набора тем (графики, таблицы и т. Д.).
Пользовательский интерфейс строится на основе пользовательских аннотаций в классах виджетов. (например, аннотация может содержать значение по умолчанию и допустимые значения, которые будут отображаться в виде раскрывающегося списка. Или флаг, указывающий, является ли поле обязательным).
Оказалось, что это хороший способ позволить разработчикам создавать виджеты, не касаясь пользовательского интерфейса.
Мы просто использовали аннотации, чтобы создать простой способ проверки наших POJO:
@NotEmpty
@Pattern(regex = "I")
private String value;
Затем мы запускаем это через валидатор Hibernate , который будет выполнять всю нашу проверку за нас:
import org.hibernate.validator.ClassValidator;
import org.hibernate.validator.InvalidValue;
public void validate(T validateMe) {
ClassValidator<T> validator = new ClassValidator<T>((Class<T>) validateMe.getClass());
InvalidValue[] errors = validator.getInvalidValues(validateMe);
}
Отлично работает. Хороший чистый код.
Аннотации предназначены только для фреймворков, и они отлично работают в hibernate / jpa. пока вы не напишете фреймворк, которому нужна дополнительная информация из переданных ему объектов, вы не будете писать свои собственные аннотации.
однако есть новая интересная функция junit, которая позволяет вам писать свои собственные аннотации в тестах - http://blog.mycila.com/2009/11/writing-your-own-junit-extensions-using. html
Я использую аннотации ежедневно, и они прекрасны. Я использую их с jsf и jpa и считаю, что с ними намного проще управлять и работать, чем с альтернативными конфигурациями XML.
Я использую аннотации для описания в моей системе синхронизации состояний, какие классы являются специализациями аннотированных классов, и в какой среде они должны использоваться (когда объект создается, он определяет для своих списков сущностей, какие классы сущностей лучше всего создавать для узлов сети; т.е. сущность Player для серверного узла вместо этого будет сущностью ServerPlayer). Кроме того, описываются атрибуты внутри классов и то, как они должны быть синхронизированы между машинами.
Мы используем пользовательские аннотации как часть нашей системы тестирования интеграции:
@Artifact: связывает тест интеграции с идентификатором проблемы. Затем для наших отделов тестирования и контроля автоматически создаются матрицы трассировки.
@Exclude: игнорирует интеграционный тест на основе платформы / версии браузера. Не дает ошибкам IE 6 засорять наши ночные прогоны тестов :)
@SeleniumSession: Определяет настройки селена для каждого теста интеграции.
Это очень мощный инструмент, но пользоваться им нужно осторожно. Просто взгляните на эти ранние файлы классов .NET Enterprise, чтобы увидеть, какими кошмарными могут быть обязательные аннотации:)
Я использовал аннотации для:
Я создал аннотации для:
Аннотации, которые я создал, считываются с помощью Reflection, когда мне нужно получить больше информации об объекте, с которым я работаю. Это работает, и работает отлично.