Java use annotation as parameter

Java java annotation as parameter code example

In Java, annotations are the tags that represent the metadata, which is attached with a class, interface, methods, etc., to indicate some special type of additional information that can be used by JVM and Java compiler. It denotes a description of the parameter (or multiple parameters) a method may receive.

How to get parameter’s annotation in java?

getParameterAnnotations returns one array per parameter, using an empty array for any parameter which doesn’t have any annotations. For example:

import java.lang.annotation.*; import java.lang.reflect.*; @Retention(RetentionPolicy.RUNTIME) @interface TestMapping < >public class Test < public void testMethod(String noAnnotation, @TestMapping String withAnnotation) < >public static void main(String[] args) throws Exception < Method method = Test.class.getDeclaredMethod ("testMethod", String.class, String.class); Annotation[][] annotations = method.getParameterAnnotations(); for (Annotation[] ann : annotations) < System.out.printf("%d annotatations", ann.length); System.out.println(); >> > 
0 annotatations 1 annotatations 

That shows that the first parameter has no annotations, and the second parameter has one annotation. (The annotation itself would be in the second array, of course.)

That looks like exactly what you want, so I’m confused by your claim that getParameterAnnotations «only returns 3 annotations» — it will return an array of arrays. Perhaps you’re somehow flattening the returned array?

Creating a Custom Annotation in Java, Java annotations are a mechanism for adding metadata information to our source code. They’re a powerful part of Java that was added in JDK5. Annotations offer an alternative to the use of XML …

Annotation @param in Java

In Java, annotations are the tags that represent the metadata, which is attached with a class, interface, methods, etc., to indicate some special type of additional information that can be used by JVM and Java compiler.

The @param annotation is a special format comment used by the javadoc that generates documentation.

In this tutorial, we will discuss how does the annotation @param works in Java.

As mentioned above, @param is a special type of format comment used by the javadoc , that generates the documentation. It denotes a description of the parameter (or multiple parameters) a method may receive.

There are also annotations like @return and @see to describe the return values and related information.

If used in any method specifically, this annotation will not affect the method of its working in any way. It is just used for creating documentation of that particular method. We can put this annotation right before a class, method, field, constructor, interface, etc.

Читайте также:  Java run thread lambda

The advantage to using this annotation is that by using this, we allow the simple Java classes, which might be containing attributes and some custom javadoc tags, to serve as simple metadata descriptions for the code generation.

/* *@param number *@return integer */ public int main number(int num) < // if number is less than 5, square it if(num < 5) < num = num * num; >else < // else add the number to itself num = num + num; >return num; > 

In the above example, method number() will act as the metadata for the rest of the code. Whenever the code reuses this method, IDE shows up the parameters this method accepts. In this case, one parameter is accepted, and that is an integer named num . Also, the return type of method, which in this case is int .

Java Annotation

Create Annotation instance with defaults, in Java, 7 Answers. Sorted by: 40. To create an instance you need to create a class that implements: java.lang.annotation.Annotation. and the annotation you want to «simulate». For example: public class MySettings implements Annotation, Settings. But you need to pay special attention to the correct implementation of equals …

Annotation with parameter for aspect

You should be able to pass the annotation interface to the interceptor method. I haven’t tried myself though.

Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface DumpToFile
@Aspect @Component public class DumpToFileAspect < @Around("@annotation(dtf)") public Object logExecutionTime(ProceedingJoinPoint joinPoint, DumpToFile dtf) throws Throwable < . // I likte to read out a parameter from the annotation. System.out.println(dtf.fileName); // will print "fileName" Object proceed = joinPoint.proceed(); . return proceed; >> 
@Aspect @Component public class DumpToFileAspect < @Around("@annotation(dumpToFileAspect)") public Object logExecutionTime(ProceedingJoinPoint joinPoint, DumpToFile dumpToFileAspect) throws Throwable < . // I likte to read out a parameter from the annotation. String fileName = dumpToFileAspect.getFileName(); Object proceed = joinPoint.proceed(); . return proceed; >> 
 @Around("@annotation(dumpFile)") public Object logExecutionTime(ProceedingJoinPoint joinPoint,DumpToFile dumpFile) 

Inside the @annotation must be the DumpToFile parameter name.

See the documentation for details

How to create custom java annotation to log method, Some example: public class Test < @LogMethodData public int sum (int first, int second) < return first + second; >> I would like to achieve, that when a custom metod will be annotated with @LogMethodData, that code behind will take care and log passed method parameters to standard output (something like …

@Pattern annotation for a method parameter

I know it’s a bit late, but have you tried putting

in the Controller class level?

Annotation @param in Java, In Java, annotations are the tags that represent the metadata, which is attached with a class, interface, methods, etc., to indicate some special type of additional information that can be used by JVM and Java compiler. The @param annotation is a special format comment used by the javadoc that generates documentation.

Читайте также:  Php mysqli query results

Источник

Аннотации в JAVA

Аннотации — это форма метаданных. Они предоставляют информацию о программе, при том сами частью программы не являются.

Применение

  • Информация для компилятора. Могут использоваться компилятором для обнаружения ошибок и подавления предупреждений.
  • Обработка во время компиляции и развертывания. Программа может создавать код, XML-файлы и т.п. на основе аннотаций.
  • Обработка во время выполнения. Некоторые аннотации могут использоваться во время выполнения программы.

Синтаксис

Начинаются с @ , могут включать элементы, которым присваиваются значения:

@Author( name = "Benjamin Franklin" date = "3/27/2003" ) class MyClass

Если такой элемент один, его имя можно опустить:

@SupressWarnings("unchecked") void MyMethod()

Если таких элементов нет, можно опустить скобки. Можно использовать несколько аннотаций в одном объявлении:

@Author(name = "Jane Doe") @EBook class MyClass

Аннотации могут быть повторяющимися.

@Author(name = "Jane Doe") @Author(name = "John Smith") class MyClass

Где в коде можно использовать аннотации

Аннотации применяются с объявлениями классов, полей и других элементов программы.

Аннотации, использующиеся с типами, называются аннотациями типов. Примеры таких аннотаций:

myString = (@NonNull String) str;

class UnmodifiableList implements @Readonly List

void monitorTemperature() throws @Critical TemperatureException

Создание аннотации

Синтаксис

Описание аннотации напоминает описание интерфейса. Оно начинается с @Interface , а его элементы похожи на методы, которые могут иметь дефолтные значения.

Пример

Допустим, в какой-то IT-компании тела всех классов начинаются с комментариев, содержащих важную информацию:

public class Generation3List extends Generation2List < // Author: John Doe // Date: 3/17/2002 // Current revision: 6 // Last modified: 4/12/2004 // By: Jane Doe // Reviewers: Alice, Bill, Cindy // class code goes here >

Описание аннотации, которая заменит комментарии:

Использование созданной аннотации:

@ClassPreamble ( author = "John Doe", date = "3/17/2002", currentRevision = 6, lastModified = "4/12/2004", lastModifiedBy = "Jane Doe", reviewers = ) public class Generation3List extends Generation2List

Замечание: для добавления аннотации в Javadocs нужно использовать @Documented:

import java.lang.annotation.*; @Documented @interface ClassPreamble < // Описание элементов аннотации >

Предопределенные аннотации

В Java есть аннотации, описанные заранее. Часть из них предоставляют информацию для компилятора, часть применяется к другим аннотациям.

Аннотации, использующиеся компилятором

Располагаются в пакете java.lang.

Помеченный этой аннотацией элемент устарел и больше не должен использоваться (это стоит отметить в Javadoc). При наличии такого элемента в программе компилятор сгенерирует предупреждение.

// Комментарий Javadoc: /** * @deprecated * объяснение, почему метод устарел. */ @Deprecated static void deprecatedMethod()

Информирует компилятор о том, что аннотируемый элемент должен переопределять элемент родительского класса. При некорректном переопределении компилятор сгенерирует ошибку.

@Override int overriddenMethod()

Подавляет генерируемые компилятором предупреждения.

Предупреждения делятся на непроверенные (unchecked) и устаревшие (deprecation). Первые возникают при использовании устаревшего кода, написанного до дженериков, вторые — при использовании кода, помеченного аннотацией @Deprecated.

Можно подавить как одну категорию, так и обе сразу:

Применяется к методу или конструктору и утверждает, что код не выполняет потенциально небезопасных операций с параметрами varargs. При использовании аннотации подавляются unchecked предупреждения, связанные с varargs.

@SafeVarargs // На самом деле не безопасно! static void m(List. stringLists) < Object[] array = stringLists; ListtmpList = Arrays.asList(42); array[0] = tmpList; //Написано неверно, но скомпилируется без предупреждения String s = stringLists[0].get(0); //ClassCastException >

Используется при описании функционального интерфейса. Подчеркивает, что это именно функциональный интерфейс.

Читайте также:  Data structure in php

@FunctionalInterface public interface Predicate

Аннотации, применимые к другим аннотациям (мета-аннотации)

Располагаются в пакете java.lang.annotation.

Указывает, сколько хранится отмеченная аннотация.

  • RetentionPolicy.SOURCE . Отмеченная аннотация сохраняется только на уровне исходного кода и игнорируется компилятором.
  • RetentionPolicy.CLASS . Сохраняется компилятором во время компиляции, но игнорируется JVM.
  • RetentionPolicy.RUNTIME . Сохраняется JVM для использования во время выполнения программы.

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

Определяет права доступа аннотации (к каким элементам ее можно применять). В аннотации @Target указывается одно из следующих значений:

  • ElementType.ANNOTATION_TYPE . Применяется к аннотации
  • ElementType.CONSTRUCTOR . Применяется к конструктору.
  • ElementType.FIELD . Применяется к полю или свойству.
  • ElementType.LOCAL_VARIABLE . Применяется к локальной переменной.
  • ElementType.METHOD . Применяется к методу.
  • ElementType.PARAMETER . Применяется к параметру метода.
  • ElementType.TYPE . Применяется к любому элементу класса.

Аннотация будет наследоваться дочерним классом (по умолчанию аннотации не наследуются). Применима только к описаниям классов.

Указывает, что аннотация повторяющаяся.

Повторяющиеся аннотации

Определение

Аннотации, которые могут применяться к одному и тому же элементу более одного раза.

Пример

Допустим, вам надо написать аннотацию, запускающую метод в заданное время или по определенному расписанию. В примере созданная аннотация @Schedule будет запускать метод каждый последний день месяца и каждую пятницу в 23:00.

@Schedule(dayOfMonth="last") @Schedule(dayOfWeek="Fri", hour="23") public void doPeriodicCleanup()

Создание повторяющейся аннотации

Для обеспечения обратной совместимости повторяющиеся аннотации хранятся в контейнере аннотаций, который автоматически генерируется java компилятором. Для генерации нужны следующие описания:

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

import java.lang.annotation.Repeatable; @Repeatable(Schedules.class) public @interface Schedule

Контейнер должен содержать массив повторяющихся аннотаций.

public @interface Schedules

Получение повторяющихся аннотаций

Reflection API предоставляет методы для получения аннотаций. При получении повторяющихся аннотаций поведение методов, которые возвращают одну аннотацию (например, AnnotatedElement.getAnnotation(Class) ) не меняется. Если нужно вернуть более одной, то необходимо сначала получить контейнер. Таким образом устаревший код продолжает работать. Также, для получения повторяющихся аннотаций можно использовать методы Java SE 8 (‘AnnotatedElement.getAnnotationsByType(Class)’).

Для получения информации о всех методах, обратитесь к документации класса AnnotatedElement.

Аннотации типов

Определение

Аннотации типов — аннотации, которые применяются вместе с типами. Везде, где вы видите тип, можно использовать эту аннотацию. Например, с оператором new, при приведении, при имплементации и при использовании throws.

Создание аннотации типов

Для создания аннотации типов в @Target указываются следующие значения, либо одно из них:

@Target () public @interface Test

TYPE_PARAMETER , означает, что аннотацию можно применять к переменным типа (например, MyClass ). TYPE_USE , разрешает применение с любыми типами.

Применение

Аннотации типов предназначены для улучшенного анализа программ и более строгой проверки типов. Например, @NonNull String str; . Java SE8 определяет аннотации типов, но не реализует. Вместо этого предлагается использовать сторонние фреймворки, реализующие их (Checker Framework).

Источник

Оцените статью