Вы используете аннотации Java?

Возможные дубликаты:
Как и где используются аннотации, используемые в Java? Java beans, аннотации: что они делают? Как они мне помогают?

Снова и снова я читал о аннотациях Java 5 как "расширенную функцию" языка. До недавнего времени я мало использовал аннотации (кроме обычных @Override, и c), но работа над рядом проектов, связанных с webservice, заставила мою руку. Поскольку я изучил Java pre-5, я никогда не тратил время, чтобы сесть и заткнуть систему аннотаций.

Мой вопрос: вы, ребята, используете аннотации? Насколько они полезны для вас, изо дня в день? Сколько StackOverflowers пришлось написать пользовательскую аннотацию?

Ответы

Ответ 1

Возможно, наиболее полезным и используемым случаем Java Annotations является использование POJO + Annotation вместо файлов конфигурации xml.

Я использую его с тех пор (как вы уже сказали), если вы используете веб-фреймворк (например, spring или шов), у них обычно есть много аннотаций, которые помогут вам.

Недавно я написал несколько аннотаций для создания пользовательской statemachine, цели проверки и аннотации аннотаций (с использованием аспекта метаданных). И ИМО они помогают много сделать код чище, легче понять и управлять.

Ответ 2

Текущий проект (200KLOC), аннотации, которые я использую все время:

@NotNull / @Nullabe
@Override
@Test
@Ignore
@ThreadSafe
@Immutable

Но я еще не написал свою собственную аннотацию... Тем не менее!

Ответ 3

Я использовал аннотации для:

  • Hibernate, поэтому мне не нужно хранить эти огромные XML файлы;
  • Сериализация XML, поэтому я описываю, как объект должен отображаться в самом объекте;
  • Предупреждение для предупреждений, которые я не хочу отключать (и для которых конкретный случай не может быть правильно разрешен).

Я создал аннотации для:

  • Опишите состояние, необходимое для выполнения моего метода (например, чтобы пользователь должен был войти в систему);
  • Отметьте мой метод как исполняемый с определенной платформы с дополнительными свойствами для этой платформы;
  • И, вероятно, некоторые другие подобные операции.

Аннотации, которые я создал, читаются с помощью Reflection, когда мне нужно получить дополнительную информацию об объекте, с которым я работаю. Он работает, и он отлично работает.

Ответ 4

Аннотации предназначены только для фреймворков, и они отлично работают в спящем /jpa. пока вы не напишете фреймворк, который нуждается в дополнительной информации из переданных ему объектов, вы не будете писать свои собственные аннотации.

однако есть новая и классная функция junit, позволяющая писать собственные аннотации в тестах - http://blog.mycila.com/2009/11/writing-your-own-junit-extensions-using.html

Ответ 5

Ежедневно я использую аннотации, и они замечательные. Я использую их с jsf и jpa и считаю их намного проще управлять и работать с альтернативными XML-конфигурациями.

Ответ 6

Я использую аннотации для описания в моей системе синхронизации состояния, какие классы являются специализациями аннотированных классов и средой, в которой они должны использоваться (когда объект создается, он будет работать для своих списков сущностей, которые являются лучшими классы сущностей для создания узлов в сети, т.е. объект-субъект для сервера node - это объект ServerPlayer). Кроме того, описываются атрибуты внутри классов и их синхронизация между машинами.

Ответ 7

У нас есть построитель отчетов как часть нашего webapp. Пользователь может добавить большое количество виджетов, которые являются небольшими вариациями в одном и том же наборе тем (графики, таблицы и т.д.).

Пользовательский интерфейс формируется на основе пользовательских аннотаций в классах виджетов. (например, аннотация может содержать значение по умолчанию и допустимые значения, которые будут отображаться в виде выпадающего списка. Или флаг, указывающий, является ли поле обязательным).

Оказалось, что это хороший способ разрешить разработчикам проверять виджеты без необходимости касаться пользовательского интерфейса.

Ответ 8

Мы просто использовали аннотации, чтобы создать простой способ проверки наших POJO:

@NotEmpty
@Pattern(regex = "I")
private String value;

Затем мы запускаем это через Hibernate validator, который сделает всю нашу проверку для нас:

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

Отлично работает. Хороший чистый код.

Ответ 9

Мы используем пользовательские аннотации как часть нашей системы тестирования интеграции:

@Artifact: связывает интеграционный тест с идентификатором проблемы. Матрицы трассировки затем автоматически генерируются для наших отделов тестирования и регулирования.

@Exclude: Игнорирует интеграционный тест на основе платформы/версии браузера. Сохраняет ошибки IE 6 от забивания наших ночных тестовых прогонов:)

@SeleniumSession: определяет тестовые настройки селена для каждого теста интеграции.

Они очень мощный инструмент, но вы должны использовать их осторожно. Просто взгляните на те ранние файлы классов .NET Enterprise, чтобы узнать, какие обязательные аннотации кошмаров могут быть:)