由于Transactional的RetentionPolicy是 RetentionPolicy.RUNTIME,所以可以使用 Java 注解处理器来处理。 实现Java 注解处理器需要实现javax.annotation.processing.AbstractProcessor,并根据SPI的加载规则需要在文件META-INF/services/javax.annotation.processing.Processor中配置自定义实现的Java 注解处理类。 这里使用auto-service工...
// 方便注解处理器生成对应的文件kapt"com.google.auto.service:auto-service:1.0.1"// 方便我们在项目源码中使用 auto-service 对应的注解implementation"com.google.auto.service:auto-service-annotations:1.0.1" 引入之后使用 @AutoService 注解,我们就可以很方便的注册注解处理器了。 @AutoService(Processor::clas...
@SupportedAnnotationTypes("com.example.MyAnnotation")public class MyAnnotationProcessor extends AbstractProcessor { @Override public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {for (TypeElement annotation : annotations) {for (Element element : roundEnv.getElemen...
processor 可能总是返回相同的 boolean 值,或者可能基于所选择的标准而返回不同的结果。 如果processor 支持 "*" 并且根元素没有注释,则输入集合将为空。processor 必须妥善处理空注释集。 boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv); quot;), Iterable<? extends Completion>...
把MyProcessor.jar放到你的builpath中,javac会自动检查和读取javax.annotation.processing.Processor中的内容,并且注册MyProcessor作为注解处理器。例子:工厂模式是时候来说一个实际的例子了。我们将使用maven工具来作为我们的编译系统和依赖管理工具。如果你不熟悉maven,不用担心,因为maven不是必须的。本例子的完成代码在...
process(Set<? extends TypeElement> annotations, RoundEnvironment env): 这相当于每个处理器的主函数main()。扫描、评估和处理注解的代码,以及生成Java文件。输入参数RoundEnviroment,可以让你查询出包含特定注解的被注解元素。后面我们将看到详细的内容。
在process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv)函数中 1.利用roundEnv.getElementsAnnotatedWith(xxx.class)可以得到xxx注解标注的Element集合 Element表示一个程序元素,比如类本身、类的变量、方法等,这个Element集合中将所有类中的元素都列出来了,为了方便生成java代码,需要要将Element集合...
process(Set annotations, RoundEnvironment env):这是每个处理器的一种方法。在这里,可以编写代码来扫描,评估和处理注解以及生成Java文件。使用RoundEnviroment传递的参数作为参数,可以查询带有特定注解的元素,我们将在后面看到。 getSupportedAnnotationTypes():在这里,必须指定此注解处理器应为其注册的注解。请注意,返回类...
processAnnotations(annotations, roundEnv); } return false; } 3、注册处理器 因为处理器是通过SPI机制实现,因此它的注册,其实就是在META-INF/services底下创建javax.annotation.processing.Processor文件,文件内容为自定义的处理器类 com.github.lybgeek.apt.process.AutoComponentProcessor ...
* @param annotations 请求处理的注解类型 * @param roundEnv 有关当前和以前的信息环境 * @return 如果返回 true,则这些注解已声明并且不要求后续 Processor 处理它们; * 如果返回 false,则这些注解未声明并且可能要求后续 Processor 处理它们 */@Overridepublicbooleanprocess(Set<?extendsTypeElement>annotations,Round...