简介
注解处理器(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<? extends TypeElement> annotations, RoundEnvironment env):
这相当于每个处理器的主函数main()。扫描、评估和处理注解的代码,以及生成Java文件。输入参数RoundEnviroment,可以让你查询出包含特定注解的被注解元素。后面我们将看到详细的内容。 - getSupportedAnnotationTypes():
这里你必须指定,这个注解处理器是注册给哪个注解的。注意,它的返回值是一个字符串的集合,包含本处理器想要处理的注解类型的合法全称。换句话说,你在这里定义你的注解处理器注册到哪些注解上。 - getSupportedSourceVersion():
用来指定你使用的Java版本。通常这里返回SourceVersion.latestSupported()。然而,如果你有足够的理由只支持Java 6的话,你也可以返回SourceVersion.RELEASE_6。我推荐你使用前者。
上图为在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
网友评论