Как я могу прочитать значение аннотации метода Java во время выполнения с помощью ASM?
Аннотация имеет только CLASS
RetentionPolicy
, так что это невозможно сделать с отражениями.
| Политика CLASS
: аннотации должны быть записаны компилятором в файл класса, но не должны сохраняться виртуальной машиной во время выполнения.
Пример.
Я хочу извлечь значение Carly Rae Jepsen
из поля artist
во время выполнения:
public class SampleClass {
@MyAnnotation(artist = "Carly Rae Jepsen")
public void callMeMaybe(){}
}
@Documented
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
String artist() default "";
}
Но почему?
Нельзя ли просто изменить RetentionPolicy
на RUNTIME
и сделать это с отражениями?
Короче говоря: нет. Я использую modelmapper (простое, интеллектуальное, сопоставление объектов). Там я указываю двунаправленные сопоставления между классами Java с помощью аннотированных методов. Я не хочу повторно использовать эту информацию об иерархических сопоставлениях для распространения событий изменения. Но предоставленная аннотация mapstruct org.mapstruct.Mapping
содержит CLASS RetentionPolicy
. Вот почему мне нужно прочитать эту информацию из файлов классов — и мне нужен ASM.