#java #аннотации
Хочу написать свои аннотации, так как возникло несколько идей, но не могу понять как это сделать. Вроде легко, но вопрос: как к аннотации прикрепить бизнес логику? Что я могу сделать с теми данными которые мне пришли в аннотации. пример: @Annotation(SomeValue.VALUE). И как мне взять это велью с сделать с ним какую-то бизнес логику? Например засунуть в какой-то метод из другой библиотеки прокрутить его и вернуть значения..
Ответы
Ответ 1
Для использования своей аннотации нужно: Реализовать аннотацию (public @interface MyAnnotationExample c типом аннотации ElementType - например: класс/метод/конструктор/поле и т.п.). Использовать эту аннотацию MyAnnotationExample в вашем коде (в соответствии с типом ElementType аннотации MyAnnotationExample), т.е. добавить аннотацию к классу/методу/полю/и т.п. Реализовать обработчик этой аннотации через рефлексию. Пример #1. Аннотация на класс и чтение аннотации класса через рефлексию. Создадим аннотацию MyAnnotationExampleForClass: import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(value = ElementType.TYPE) //указание что данная аннотация вешается на класс @Retention(value = RetentionPolicy.RUNTIME) //аннотация доступна в процессе работы модуля public @interface MyAnnotationExampleForClass { String name() default "default name"; //в name() мы будем хранить значения аннотации } Создадим класс MyClassExample с использованием аннотации MyAnnotationExampleForClass: @MyAnnotationExampleForClass(name = "this is my annotation value!!!") public class MyClassExample { ... } Создадим класс MyAnnotationProcessorExample для получения значений аннотаций: class MyAnnotationProcessorExample { MyClassExample myClass = new MyClassExample(); //получаем нашу аннотацию из нашего объекта MyAnnotationExampleForClass a = myClass.getClass().getAnnotation(MyAnnotationExampleForClass.class); System.out.println("выводим значение аннотации = " + a.name()); System.out.println("печатаем тип аннотации со значением = " + a.toString()); } Пример #2. Аннотация на метод класса и чтение аннотации метода через рефлексию. Добавим еще аннотацию MyAnnotationExampleForMethod для метода: @Target(value = ElementType.METHOD) @Retention(value = RetentionPolicy.RUNTIME) public @interface MyAnnotationExampleForMethod { String name() default "default name 2"; } Добавим в наш класс MyClassExample (из примера #1) новый метод runForest(): @MyAnnotationExampleForClass(name = "this is my annotation value!!!") public class MyClassExample { @MyAnnotationExampleForMethod(name = "this is my method-annotation value") public void runForest() { System.out.println("Our Forest run very good!"); } } Создадим класс MyAnnotationProcessorExample2 для получения значений аннотаций: class MyAnnotationProcessorExample2 { MyClassExample myClass = new MyClassExample(); //получаем наш метод из нашего объекта Method m = tm.getClass().getMethod("runForest"); //получаем аннотацию из нашего метода MyAnnotationExampleForMethod a = m.getAnnotation(TimeAnnotationMethod.class); System.out.println("выводим значение аннотации = " + a.name()); System.out.println("печатаем тип аннотации со значением = " + a.toString()); } Теперь можно эти классы-обработчики MyAnnotationProcessorExample и MyAnnotationProcessorExample2 использовать в нужных местах для обработки бизнес-логики. Примеры привел самые примитивные, только для общего понимания. Для более полноценных реализаций нужно разбираться с понятием java reflection. Также рекомендую посмотреть темы: В каких случаях на практике применять рефлексию, аннотации? Зачем создавать собственные аннотации? Аннотация в Java EE
Комментариев нет:
Отправить комментарий