如何自定义注解处理器

简介

注解处理器(Annotation Processor)是javac的一个工具,不管是运行时注解还是编译时注解,都会通过处理器在编译时进行扫描和处理注解。

自定义处理器

1、在Androidstudio中创建一个Java Library Module(注解处理器需要javax包的支持,Android环境下是访问不到javax包的,同时注解处理器要被打包进jar包里面才能被系统识别,这就是选用ava Library的原因,目前注解注解框架均是如此。)

2、定义一个注解


image.png

3、 继承虚处理器AbstractProcessor


image.png
  • init(ProcessingEnvironment processingEnvironment):
    每一个注解处理器类都必须有一个空的构造函数。然而,这里有一个特殊的init()方法,它会被注解处理工具调用,并输入ProcessingEnviroment参数。ProcessingEnviroment提供很多有用的工具类Elements, Types和Filer。后面我们将看到详细的内容。
  • process(Set annotations, RoundEnvironment env):
    这相当于每个处理器的主函数main()。扫描、评估和处理注解的代码,以及生成Java文件。输入参数RoundEnviroment,可以让你查询出包含特定注解的被注解元素。后面我们将看到详细的内容。
  • getSupportedAnnotationTypes():
    这里你必须指定,这个注解处理器是注册给哪个注解的。注意,它的返回值是一个字符串的集合,包含本处理器想要处理的注解类型的合法全称。换句话说,你在这里定义你的注解处理器注册到哪些注解上。
  • getSupportedSourceVersion():
    用来指定你使用的Java版本。通常这里返回SourceVersion.latestSupported()。然而,如果你有足够的理由只支持Java 6的话,你也可以返回SourceVersion.RELEASE_6。我推荐你使用前者。
image.png

上图为在process方法中使用javapoet自动生成java类

4、注册处理器

  • 注册方式一:手动注册
    在使用注解处理器需要先声明,步骤:
    • 需要在 processors 库的 main 目录下新建 resources 资源文件夹;
    • 在 resources文件夹下建立 META-INF/services 目录文件


      image.png

在文件java.lang.Process中增加注册器路径名:
com.lsm.processor.JsonProcessor

  • 方式二:自动注册
    google提供了一个注册处理器的库AutoService。帮助将要编译的处理器进行编译。
    compile ‘com.google.auto.service:auto-service:1.0-rc4’


    image.png

    image.png

至此自定义注解处理器完成。

5、使用自定义注解处理器
将processor编译出的jar包拷贝到项目中


image.png
image.png

在工程的build.gradle中增加使用的处理器:


image.png

你可能感兴趣的:(如何自定义注解处理器)