Java运行时等效于使用javax Processor / google @AutoService进行注释处理

问题描述 投票:0回答:1

我之前使用RetentionPolicy.SOURCEjavax.annotation.processing.Processor/AbstractProcessor进行过com.google.auto.service.@AutoService级别的注释处理,那是我第一次发现非常有用的RoundEnvironment.getElementsAnnotatedWith()

现在,在一个完全不相关的项目中,我需要相同的功能,但是需要在运行时。换句话说,我有注释

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Mapper {
    Class<?> forUID() default Object.class;
}

并且我想获取每个注有@Mapper的元素(当然,它只能是构造函数或方法)。我可以在运行时使用RoundEnvironment吗?如果是,我如何获取它的实例?如果否,那么是否存在等效的运行时?预先感谢。

使用中:

  • JDK 11(openjdk11)
  • Maven 3.6.3
java annotations runtime annotation-processing
1个回答
0
投票
注解处理是仅编译时的工具,注解的保留只是说明注解是在运行时可用还是仅在源代码中可用,对于运行时,您可以使用反射,但仍然可以在编译时使用注解处理器是时候生成一个列出所有带有特定注释的类型的类的类。
© www.soinside.com 2019 - 2024. All rights reserved.