Annotation (Аннотация) используется для предоставления метаданных для вашего Java кода. Как метаданные, Annotation не влияют напрямую на выполнение ваших кодов, несмотря на то, что некоторые аннотации могут быть реально использованы с той целью. Annotation добавлен в Java, начиная с Java 5
Annotation используются с целью
Инструкция для компилятора (Compiler)
Инструкция во время построения (Build-time)
Инструкция во время запуска (Runtime)
1.1- Инструкция для компилятора
Java имеет 3 Annotation, которые вы можете использовать для предоставления инструкций для компилятора Java.
@Deprecated
@Override
@SuppressWarnings
Эти Annotation объяснены более детально в данной статье.
1.2- Интструкция по времени построения (Build-time)
Annotation может быть использован во время построения (Build-time), когда вы строите ваш проект программного обеспечения. Процесс построения включает создание исходных кодов, компиляции исходных кодов создание файлов XML (например дескрипторы развертывания), упаковка скомпилированного кода и файлов в один файл JAR, и т.д. Построение программного обеспечения обычно выполняется автоматическим инструментом строения как Apache Ant или Apache Maven . Строение инструментов, которые могут сканировать ваш код Java и в зависимости от ваших аннотаций (Annotation) создать исходный код или другие файлы на основании этих аннотаций.
1.3- Инструкция по времени запуска (Runtime)
Обчычно, Annotation не присутствуют в вашем коде Java после компиляции. Но можно определить ваши Annotation во время запуска. Эти аннотации потом могут быть доступны через Java Reflection, и использоваться для инструкции ваших программ, или API третьей стороны (Third party API).
Имеются 3 важных Annotation в Java
@Deprecated
@Override
@SuppressWarnings
2.1- @Deprecated
Это Annotation использующийся для аннотации чего-то устаревшего, как класс или метод, который не стоит больше использовать.
Аннотация @Deprecated компилятор интересуется, чтобы оповестить вас об альтернативе. Или с программированием IDE, например Eclipse так же показывает вам визуальные оповещения.
DeprecatedMethodDemo.java
В следующей иллюстрации Eclipse оповещает вас:
java - джава - учиться java - учебник java -
нерекомендуемый метод демо java
- примеры java - java-программы
2.2- @Override
Annotation @Override используется для методов, которые переопределяют метод в суперклассе (superclass). Если данный метод не соответствует методу в суперклассе, компилятор оповестит вас об ошибке.
Annotation @Override не обязателен чтобы переопределить метод суперкласса. Все же это хорошая идея для использования. В случае, если кто-то изменил название метода супекласса, метод в вашем классе больше не будет переопределенным методом. При отсутствии аннотации @Override вы не найдете. С аннотациями @Override компилятор оповестит вас о том, что методы подкласса не переопределяют методы в суперклассе.
Смотрите пример:
Job.java
JavaCoding.java
И это оповещение Java Compiler:
java - джава - учиться java - учебник java -
Имя задания метода
- примеры java - java-программы
2.3- @SuppressWarnings
Аннотация @SuppressWarnings заставляет компилятор останавливать предупреждения определенного метода. Например, метод вызывает устаревший метод, или внутри метода есть небезопасный вид, компилятор может создать предупреждение. Вы можете отключить эти предупреждения аннотацией данного метода используя @SuppressWarnings.
Используя @interface как ключевое слово объявления Annotation, annotation довольно похож на интерфейс. Annotation содержит или не содержить элементы (elements) внутри.
Характеристики элементов (element) annotation:
Нет функциональной основы
Нет функционального параметра
Возвращенное объявление должно быть определенного вида:
Примитивный вид (boolean, int, float, ...)
Enum
Annotation
Class (Например: String.class)
Может иметь значение по умолчанию
3.1- Ваш первый Annotation
MyFirstAnnotation.java
Annotation может использоваться на:
TYPE - Прикрепленный на объявлении Class, interface, enum, annotation.
FIELD - Прикрепленный на объявлении поля (field), включая констанции enum.
METHOD - Прикрепленный на объявлении method.
PARAMETER - Прикрепленный на объявлении parameter
CONSTRUCTOR - Прикрепленный на объявлении конструктора
LOCAL_VARIABLE - Прикрепленный на локальной переменной.
ANNOTATION_TYPE - Прикрепленный на объявлении Annotation
PACKAGE - Прикрепленный на объявлении package.
UsingMyFirstAnnotation.java
3.2- Annotation с элементом value. (Особенный)
Annotation имеет элемент с названием value, который имеет особенные характеристики:
AnnWithValue.java
UsingAnnWithValue.java
3.3- @Retention & @Target
RetentionPolicy.SOURCE: Существует на исходном коде, и не узнаваем компилятором (compiler).
RetentionPolicy.CLASS: Компилятер разпознает существование, но не распознается виртуальной машиной при запуске (Runtime).
RetentionPolicyRUNTIME: достигает высшую степень существования, разпознается компилятором (compiler), и распознается существование виртуальной машиной при запуске.
@Target
@Target: Используется для примечания другого annotation, и в каких сферах тот annotation будет использоваться.
ElementType.TYPE - Прикреплен на объявлении Class, interface, enum, annotation.
ElementType.FIELD - Прикреплен на объявлении поля (field), включая константы enum.
ElementType.METHOD - Прикреплен на объявлении method.
ElementType.PARAMETER - Прикреплен на объявлении parameter
ElementType.CONSTRUCTOR - Прикреплен на объявлении конструктора
ElementType.LOCAL_VARIABLE - Прикреплен на объявлении локальной переменной.
ElementType.ANNOTATION_TYPE - Прикреплен на объявлении Annotation
ElementType.PACKAGE - Прикреплен на объявлении package.
AnnFM.java
UsingAnnFM.java
3.4- Annotation & Reflection
Java Reflection может определить такие вещи как (Class, field, method, ..) аннотированный используя некоторый Annotation. И конечно же, он распознает Annotation имеющие @Retention(RetentionPolicy.RUNTIME)
Пример ниже описывет программу, которая читает аннотации в файлах Java и создает файлы Html. Каждый class соответствует файлу html.
Вы создаете ваш Annotation и используете их в вашем приложении Java. Эти Annotation имеют правило использования данное вами. Вы хотите, чтобы компилятор Java оповещал ошибку при неправильном использовании во время компиляции. И если вы используете Eclipse чтобы написать код, Eclipse оповещает об ошибке прямо на IDE.
Это вполне возможно с APT ( Annotation Processing Tool).
Вы можете посмотреть инструкцию APT по ссылке:
Настройте java compiler для обработки вашего Annotation (Annotation Processing Tool)
1- Введение
Статья основана на:
Eclipse 4.6 (NEON)
Java 7
2- Что такое Annotation Processing Tool (APT)
Приводится ситуация:
Вы создаете некоторые свои Annotation и используете их в вашем приложении Java. Эти Annotation имеют правила использования данные вами. Вы хотитте, чтобы компилятор Java (Java compiler) оповещал ошибку использования не по правилам если они возникают во время компиляции. И если вы используете Eclipse чтобы написать код, вы хотите чтобы Eclipse оповещал ошибки использования прямо на IDE.
Это вполне выполнимо с APT ( Annotation Processing Tool).
Определение APT:
APT (Java annotation processing tool) это инструмент, который вы можете использовать для обработки annotation на исходном коде Java. Все что вам нужно это выполнить (implements) процессор Annotation.
Например:
@PublicFinal это ваш annotation, ваше правило - он может аннотировать только на методе или поле с модификатром, являющимся публичным и финальным. Если использовать неправильно, оповещение отобразится во время компиляции, одновременно выдает оповещение на IDE:
3- Модель примера
Это модель примера, который я представлю в этой статье:
java - джава - учиться java - учебник java -
apt процессор
- примеры java - java-программы
Ваши Annotation:
@PublicFinal используется только для метода или поля с модификатором (modifier), являющимися публичными и финальными (public và final).
@Controller использутеся только для клсса, и название класса должно иметь суффикс Controller.
@Action используется тоько для метода, возвращающего вид String.
Процессоры PublicFinalProcessor, ControllerProcessor, ActionProcesser будут выполнять задание оповещения при неправильном использовании во время компиляции, включая отображение оповещения ошибок на IDE Eclipse.
4- Project APTProcessor
Для начала, создадим Project.
APTProcessor
java - джава - учиться java - учебник java -
apt получить процессор
- примеры java - java-программы
Action.java
Controller.java
PublicFinal.java
AcctionProccessor.java
ControllProcessor.java
PublicFinalProcessor.java
DevLog.java
Declare Service
java - джава - учиться java - учебник java -
метаданных apt процессора
- примеры java - java-программы
Упаковка project APTProcessor в file jar:
Нажмите на правую кнопку мыши на Project и выберите Export:
java - джава - учиться java - учебник java -
экспорт java
- примеры java - java-программы
java - джава - учиться java - учебник java -
jarfile экспорт java
- примеры java - java-программы
java - джава - учиться java - учебник java -
jar файла specificati
- примеры java - java-программы
java - джава - учиться java - учебник java -
вариант упаковки jar
- примеры java - java-программы
java - джава - учиться java - учебник java -
банку манифеста спецификация
- примеры java - java-программы
Export успешно:
java - джава - учиться java - учебник java -
aptp процессор
- примеры java - java-программы
5- Project APTTutorial
Создать Project APTTutorial:
java - джава - учиться java - учебник java -
aptp учебник
- примеры java - java-программы
Нажать на правую кнопку мыши на APTTutorial и выбрать properties.Объявить использование библиотеки APTProccessor который вы создали до этого.
java - джава - учиться java - учебник java -
свойства aptp учебник
- примеры java - java-программы
Объявить использование вашего Annotation Processor c Compiler.
java - джава - учиться java - учебник java -
Аннотация propertites
- примеры java - java-программы
java - джава - учиться java - учебник java -
Продаю aptt учебник
- примеры java - java-программы
Объявить местоположение библиотеки Processor:
java - джава - учиться java - учебник java -
путь заводе
- примеры java - java-программы
Вы можете нажать на Advanced.. чтобы увидеть какой Processor уже зарегистрирован с Compiler
java - джава - учиться java - учебник java -
путь заводе расширенный
- примеры java - java-программы
Нажмите на OK чтобы завершить:
java - джава - учиться java - учебник java -
свойств фабрика путь расширенный
- примеры java - java-программы
java - джава - учиться java - учебник java -
Параметры обработки аннотаций
- примеры java - java-программы
Создать некоторые классы test используя ваши Annotation и Processor:
учебник java annotationsПример аннотации javaсписок аннотаций javaаннотации в java учебном пунктеаннотация в java-точке javaчто примечание веснойчто такое метаданные в javaаннотации в селенеучебник java annotationsаннотации в java учебном пунктеаннотация в java-точке javaтипы аннотаций в javaкласс аннотации java