Объяснение об аннотациях - PullRequest
       16

Объяснение об аннотациях

2 голосов
/ 06 октября 2009

Может ли кто-нибудь объяснить простым языком, что означают следующие два абзаца? (Взято из http://www.ibm.com/developerworks/java/library/j-cwt08025.html)

"Аннотации более гибкие в условия их использования, с варианты для аннотации информация должна быть включена в класс файлы выводятся компилятором и сделаны доступно приложению при запуске время "

Не уверен, что это значит. Можно ли настроить аннотации для необязательного изменения байт-кода?

Хотя аннотации идеально подходят для метаданные, относящиеся к конкретному компонент, они не очень хорошо подходят для метаданные с кросс-компонентом применение.

ИМХО большинство веб-приложений были бы многокомпонентными. Что автор пытается здесь сказать?

Ответы [ 2 ]

3 голосов
/ 06 октября 2009

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

Это, я думаю, относится к тому факту, что аннотации Java5 могут быть удалены компилятором, тогда как некоторые могут быть сохранены в байт-коде. Это контролируется аннотацией @Retention, которая помещается в ваш тип аннотации, например,

@Documented
@Retention(value=RUNTIME)
public @interface Deprecated

Это указывает на то, что аннотация @Deprecated будет присутствовать в байт-коде, а также будет видна для отражения. java.lang.annotation.RetentionPolicy определяет различные опции.

3 голосов
/ 06 октября 2009

«Аннотации являются более гибкими с точки зрения того, как вы их используете, с опциями того, должна ли информация аннотации включаться в файлы классов, выводимые компилятором, и быть доступной приложению во время выполнения»

Он более гибкий, чем XDoclet, потому что:

  • может использоваться из исходного кода (например, XDoclet)
  • it можно использовать во время выполнения , когда у вас есть только байт-код, а не исходный код (в отличие от XDoclet)

Хотя аннотации идеальны для метаданных, относящихся к конкретному компоненту, они не очень подходят для метаданных с многокомпонентным применением.

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

  • если для метода определена аннотация, то он естественным образом применяется к этому методу
  • если для поля определена аннотация, она естественным образом применяется к этому полю
  • если для класса определена аннотация, она естественным образом применяется к этому классу
  • если для пакета определена аннотация, она естественным образом применяется к этому пакету

Если вы хотите иметь то же самое во внешнем XML-файле, вы должны использовать сложный синтаксис для идентификации фрагмента кода, на который вы ссылаетесь. Так что их очень легко наносить.

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


Я не верю, что в веб-приложении большинство вещей являются многокомпонентными.

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