Аннотации java.

Rambler's Top100

Аннотации
Многие программные интерфейсы подразумевают наличие значительного количества стандартного кода. Например, для написания web-сервиса JAX-RPC шаблон кода может быть сгенерирован автоматически специальной программой, если исходная программа "украшена" аннотациями, указывающими, какие методы удаленно доступны. Другие программные интерфейсы требуют наличия "дополнительных файлов", которые бы обслуживались параллельно программам. Например, JavaBeans требует, чтобы класс BeanInfo поддерживался параллельно с Bean, а Enterprise JavaBeans (EJB) требует использования дескриптора. Было бы удобнее и меньше появлялось бы ошибок, если бы информация в этих дополнительных файлах рассматривалась непосредственно в программе как аннотация. Платформе Java всегда были присущи различные специальные механизмы аннотации. Например, модификатор transient - специальная аннотация, указывающая, что поле должно игнорироваться программным обеспечением сериализации, а тэг javadoc @deprecated - специальная аннотация, указывающая, что метод больше не должен использоваться. Начиная с версии 5.0, платформа имеет общую аннотацию цели (также известную как метаданные) - средство, которое позволяет определить и использовать ваши собственные типы аннотации. Средство состоит из синтаксиса для объявления типа аннотации, синтаксиса определения аннотации, программного интерфейса для чтения аннотации, способа задания прикладного файла для аннотаций и инструмента обработки аннотации. Аннотации непосредственно не затрагивают семантику программы, но на самом деле влияют на то как программы рассматриваются инструментами и библиотеками, которые могут в свою очередь затронуть семантику исполняемой программы. Аннотации могут читаться исходными файлами, прикладными файлами или во время исполнения программы. Аннотации дополняют теги javadoc. Вообще, если подразумевается разметка для изменения или создания документации, вероятно, необходим тэг javadoc; иначе, это должна быть аннотация. Обычно разработчики никогда не определяют тип аннотации, но это не так сложно. Описания типов аннотации похожи на описания обычного интерфейса. Символ "собака" (@) предшествует ключевому слову интерфейса. Описание каждого метода определяет элемент типа аннотации. Описания метода не должны иметь никаких параметров или операторов throws. Возвращаемые типы могут быть только типом String, Class, enum, аннотационным типом и массивом предыдущих типов. Методы могут иметь значения по умолчанию. Ниже пример описания типа аннотации:
Аннотации это не МетаДанные . . . Sun рассматривает аннотации как дополнение к существующим метаданным в Java. Я не согласен. Давайте определим понятие МетаДанные. МетаДанные - это данные о данных. Я рассматриваю reflection API как нечто, отображающее МетаДанные. Reflection API даёт информацию о классах и их методах, о типах аргументов у методов. При помощи Reflection API можно получить информацию о структуре вашего Java кода. . . . аннотации это "Декоративные Данные" При помощи аннотаций не возможно получить информацию о Java коде, об объектах ваших Java классов, о методах или полях. Однако аннотации описывают дополнительные свойства ваших Java классов, методов и полей. Аннотации предназначены для того, что-бы описывать дополнительные о том как код должен быть скомпилирован, установлен или о том как его нужно исполнять. Это не метаданные, это декоративные данные. Ну что-ж. Так или иначе но аннотации действительно не очень похожи на метаданные. Назовём это "Декоративные Данные". И сразу признаем что использование аннотаций в качестве метаданных будет приводить к ошибкам. Кстати в естественном языке прилагательные тоже не являются метаданными. Аннотации это захардкодженная конфигурация Тут даже переводить не хочу. Аннотации не предназначены для замены конфигурациям. Использовать аннотации в качестве конфигураций это не более гибко чем хардкодить конфигурации внутри кода. Конфигурации - это нечто отвечающее на вопрос "как? где? сколько?", а анотации - на вопрос "какой?". Аннотации не заменяют XML
Аннотации, появившиеся в Java5 сыграли весьма позитивную роль для развития языка. Рефакторить стало проще, рефакторить стало интерестнее. (с) Но вместе с тем появились и проблемы. Читать и разбираться с кодом, который работает с аннотациями стало значительно тяжелее. С одной стороны пока не выработано общепризнанных coding-convensions для выполнения одних и тех-же операций. С другой стороны использовать аннотации сейчас весьма модно, поскольку они упрощают работу. Но почти весь код, который мне приходилось читать (и писать) с использованием аннотаций воняет
Что же такое аннотации? Аннотации - они же JSR-175 (Meta-data) - позволяют связывать метаданные с программными элементами (такими как классы, интерфейсы и методы). Они могут служить дополнительными модификаторами без изменения основного кода для своих элементов.


А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х  Ц Ч Ш Щ Э Ю

Rambler's Top100