Аннотации Java предоставляют некоторую информацию о коде, но не влияют напрямую влияют на содержимое кода, которое он аннотирует. В этом уроке мы узнаем об аннотациях Java, о том, как настраивать аннотации, использование аннотаций и как анализировать аннотации посредством размышлений.
Java 1.5 представляет аннотации, и многие рамки Java в настоящее время широко используют аннотации, такие как Hibernate, Jersey и Spring. Аннотация встроены в программу в качестве метаданных программы. Аннотация могут быть проанализированы некоторыми инструментами анализа или инструментами компонента. Мы также можем заявить, что аннотации оказывают влияние во время компиляции или исполнения.
Перед использованием аннотаций исходные данные программы проходят только аннотации Java и Javadoc, но аннотации обеспечивают гораздо больше, чем эти. Аннотации не только содержат метаданные, но и могут действовать в отношении последовательности выполнения программы. Интерпретатор аннотации может решить заказ на выполнение программы посредством аннотации. Например, в веб -сервисе Jersey мы добавляем ** пути ** аннотацию в форме строки URI в метод, затем во время работы программы интерпретатор Jerser определит, что метод будет вызывать заданный URI.
Создать java пользовательские аннотации
Создание пользовательской аннотации аналогично созданию интерфейса, но ключевое слово аннотированного интерфейса должно начинать с символа @. Мы можем объявить методы аннотации. Давайте сначала посмотрим на пример аннотации, а затем мы обсудим некоторые его характеристики.
пакет com.journaldev.annotations; Импорт java.lang.annotation.documented; импорт java.lang.annotation.elementtype; импорт java.lang.annotation.inherited; импорт java.lang.annotation.retention; импорт java.lang.annotation.retentionpolicy; import java.lang.nantation.target; @Документирован@target (elementtype.method)@enhorited@hareveration (hestumentpolicy.runtime) public @Interface methodInfo {string Автор () по умолчанию 'pankaj'; String date (); int revision () по умолчанию 1; String comments ();} Метод аннотации не может нести параметры;
Типы возвращаемых значений метода аннотации ограничены: основные типы, строки, перечисления, аннотации или массивы этих типов;
Методы аннотации могут иметь значения по умолчанию;
Сами аннотации могут содержать мета -аннотации, которые используются для аннотации других аннотаций.
Вот четыре типа мета -аннотаций :
1. @documented - указывает на то, что элементы, которые имеют эту аннотацию, могут быть задокументированы такими инструментами, как Javadoc. Этот тип следует использовать для аннотирования этих типов, которые влияют на объявление клиента об использовании аннотированных элементов. Если объявление аннотируется с использованием документированных, этот тип аннотированной аннотации используется в качестве публичного API для аннотированного участника программы.
2. @Target - указывает на область объема элементов программы, которые аннотации этого типа могут аннотировать. Значениями этой мета -аннотации может быть тип, метод, конструктор, поле и т. Д. Если целевая мета -аннотация не отображается, определенная аннотация может применяться к любому элементу программы.
3. @Inhered - указывает, что тип аннотации автоматически унаследован. Если пользователь запрашивает этот тип мета -аннотации в текущем классе, и объявление текущего класса не содержит этого типа мета -аннотации, он также автоматически запрашивает, имеет ли родительский класс текущего класса унаследованную мета -аннотацию. Это действие будет повторено, чтобы узнать, что тип аннотации был найден, или родительский класс на верхнем уровне запросил.
4.@Удерживание - указывает продолжительность сохранения аннотации. Значения HASTERPOLICY - это источник, класс, время выполнения.
Java встроенные аннотации
Java предоставляет три встроенные аннотации.
1. @Override - Когда мы хотим переписать метод в родительском классе, нам нужно использовать эту аннотацию, чтобы сообщить компилятору, что мы хотим переписать этот метод. Таким образом, компилятор будет запрашивать сообщение об ошибке, когда метод в родительском классе удаляется или произойдут изменения.
2. @Deprecated - Когда мы хотим, чтобы компилятор знал, что метод не рекомендуется, мы должны использовать это аннотацию. Java рекомендует это аннотацию в Javadoc, мы должны предоставить, почему этот метод не рекомендуется и альтернативные методы.
3. Его политика удержания - источник (примечание переводчика: действителен в исходном файле) и отброшен компилятором.
Давайте посмотрим на пример встроенных аннотаций в Java, см. Пользовательские аннотации, упомянутые выше.
пакет com.journaldev.annotations; Импорт java.io.filenotFoundException; импорт java.util.arraylist; импорт java.util.list; открытый класс AnnotationExample {public static void main (string [] args) {} @override @methodInfo (Author = 'pankaj', Comments = 'Основной метод', date = '17 ноября 2012 года', Revision = 1) Public String toString () {return 'overden toString Method';} @Deprected @MethodInfo (Комментарии = 'Decriden ToString';} @PuldEcted @Methodinfo (Комментарии = Decrected ', DateString', DateStrication '2012 void oldmethod () {System.out.println ('Old Method, не используйте его.');} @suppresswarnings ({'unchecked', 'temercation'}) @methodinfo (Author = 'pankaj', Комментарии = «Основной метод», дата = 17 ноября 2012 новый ArrayList (); L.Add ('ABC'); OldMethod ();}}Я полагаю, что этот пример может быть самоочевидным и может отображаться в разных сценариях.
Анализ аннотаций Java
Мы будем использовать технологию отражения, чтобы анализировать аннотации классов Java. Затем следует установить AnnotationPolicy, в противном случае информация о аннотации класса Java не будет доступна во время выполнения, поэтому мы не можем получить какие -либо данные, связанные с аннотацией от него.
пакет com.journaldev.annotations; Импорт java.lang.annotation.annotation; импорт java.lang.reflect.method; public class AnnotationParsing { public static void main(String[] args) { try { for (Method method : AnnotationParsing.class .getClassLoader() .loadClass(('com.journaldev.annotations.AnnotationExample')) .getMethods()) { // checks if MethodInfo annotation is present for the method if (method.isannotationpresent (com.journaldev.annotations.methodinfo.class)) {try {// итерации все аннотации, доступные в методе (аннотация anno: method.getdeclaredannotations ()) {System.out.println ('annotation in method' ' + метод +' ':' + anno); } MethodInfo methodanno = method.getAnnotation (methodInfo.class); if (methodanno.revision () == 1) {System.out.println ('метод с ревизией № 1 ='+ Метод); }} catch (throwable ex) {ex.printstacktrace (); }}}} catch (SecurityException | classNotFoundException e) {e.printStackTrace (); }}} Запуск вышеупомянутой программы выведет:
В методе «public java.lang.lang.string com.journaldev.annotations.annotationExample.toString () ': @com.journaldev.annotations.methodinfo (автор = pankaj, revision = 1, комментарии = основной метод, дата = 17 ноября 2012 г.) метод с ревизией 1 = prankaj.lang.string.string. com.journaldev.annotations.annotationExample.toString () аннотация в методе «public static void com.journaldev.annotations.annotationExample.oldmethod ()»: @java.lang.deprecated () аннотации в методе «public void com.journaldev.annotations.annotationExament. @com.journaldev.annotations.methodinfo (автор = pankaj, revision = 1, комментарии = оправданный метод, дата = 17 ноября 2012 г.) Метод с ревизией № 1 = общедоступная статическая void com.journaldev.annotations.annotationExample.annotations.annotation. java.io.filenotfoundexception ': @com.journaldev.annotations.methodinfo (автор = pankaj, revision = 10, комментарии = основной метод, дата = 17 ноября 2012 г.)
Это все об этом уроке, и, надеюсь, вы сможете чему -то научиться.