Java 的 Annotation Processor 是非常有用的功能,很多常用的库和框架都使用了 Annotation Processor 来生成代码,比如Butter Knife 就用来生成 findViewById 等代码。
对于一些模板代码使用 Annotation Processor 来自动生成可以提高编写代码的效率和质量,手工编写毕竟容易出现纰漏,工具自动生成是有质量保证的。
注解类
@interface生成注解类
@Target限定目标
@Retention限制注解有效声明
注解器
注解处理器的功能就是用来读取代码中的注解然后来生成相关的代码。
注解器类有几点要求:
1. 需要继承至 AbstractProcessor
2. 需要使用类的全称(包含包名)来指定其支持的注解类型(com.example.autoparcel.AutoParcel)
3. 实现 process() 函数,在该函数中来处理所支持的注解类型并生成需要的代码。如果没有其他处理器需要继续处理该注解,则 process() 返回 true。
注解器配置:
创建一个 java META_INF 文件来告诉系统具有注解处理功能。Java 代码在编译的时候,系统编译器会查找所有的 META_INF 中的注册的注解处理器来处理注解。项目中创建如下目录:src/main/resources/META_INF/services,在 services 目录下面创建一个名字为 “javax.annotation.processing.Processor” 的文本文件:
该文件中每行一个注解处理器的全名:如:com.example.test.MyProcessor(包名 + 类名)
项目实战
项目地址:https://github.com/csuliutao/AnnotationProcessorTest
注意:javaCompileOptions配置和编译方法