概念
注解处理器(Annotation Processor)是javac内置的一个用于编译时扫描和处理注解(Annotation)的工具。简单的说,在源代码编译阶段,通过注解处理器,我们可以获取源文件内注解(Annotation)相关内容。
用途
由于注解处理器可以在程序编译阶段工作,所以我们可以在编译期间通过注解处理器进行我们需要的操作。比较常用的用法就是在编译期间获取相关注解数据,然后动态生成.java源文件(让机器帮我们写代码),通常是自动产生一些有规律性的重复代码,解决了手工编写重复代码的问题,大大提升编码效率。
例子
Annotation Processor实质原理
** 编译期间根据注解(Annotation)获取相关数据 **
既然Annotation Processor是为了在编译期间获取注解(Annotation)相关内容,那么,具体的操作步骤要如何做呢:
Android Studio创建一个java library
自定义一个注解(Annotation),用于存储元数据
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.FIELD)
public @interface BindView {
int value() default -1;
}
创建一个自定义Annotation Processor继承于AbstractProcessor
package com.example;
@AutoService(Processor.class)
public class MyProcessor extends AbstractProcessor {
@Override
public synchronized void init(ProcessingEnvironment env){
}
@Override
public boolean process(Set extends TypeElement> annoations, RoundEnvironment roundEnv) { }
@Override
public Set getSupportedAnnotationTypes() {
}
@Override
public SourceVersion getSupportedSourceVersion() {
}
}
@AutoService(Processor.class) :向javac注册我们这个自定义的注解处理器,这样,在javac编译时,才会调用到我们这个自定义的注解处理器方法。
AutoService这里主要是用来生成
META-INF/services/javax.annotation.processing.Processor文件的。如果不加上这个注解,那么,你需要自己进行手动配置进行注册,具体手动注册方法如下:
1.创建一个
META-INF/services/javax.annotation.processing.Processor文件,
其内容是一系列的自定义注解处理器完整有效类名集合,以换行切割:
com.example.MyProcessor
com.foo.OtherProcessor
net.blabla.SpecialProcessor
2.将自定义注解处理器和
META-INF/services/javax.annotation.processing.Processor打包成一个.jar文件。所以其目录结构大概如下所示:
MyProcessor.jar
- com
- example
- MyProcessor.class