相关疑难解决方法(0)

如何使用 ASM 读取 Java 类方法注释值

如何在运行时使用ASM读取 Java 方法注释的值?
注释只有一个CLASS RetentionPolicy,因此不可能使用反射来做到这一点。

| 策略CLASS:注释将由编译器记录在类文件中,但不需要在运行时由VM保留

示例:我想在运行时从字段中
提取值:Carly Rae Jepsenartist

public class SampleClass {

    @MyAnnotation(artist = "Carly Rae Jepsen")
    public void callMeMaybe(){}
}
Run Code Online (Sandbox Code Playgroud)
@Documented
@Retention(RetentionPolicy.CLASS)
@Target(ElementType.METHOD)
public @interface MyAnnotation {

    String artist() default "";
}
Run Code Online (Sandbox Code Playgroud)

但为什么?
难道你不能只改变RetentionPolicytoRUNTIME并用反射来做吗?
简而言之:不。我使用modelmapper框架(简单、智能、对象映射)。在那里,我通过带注释的方法指定了 Java 类之间的双向映射。我不想重用此分层映射信息来进行更改事件传播。但提供的mapstruct org.mapstruct.Mapping注解有CLASS RetentionPolicy. 这就是为什么我需要从类文件中读取该信息 - 并且需要ASM

java reflection annotations java-bytecode-asm modelmapper

4
推荐指数
1
解决办法
1889
查看次数