注解处理器(Annotation Processor)是Java编程语言中的一种工具,用于在编译时处理特定的注解。代码在编译过程中会扫描源代码中的注解,然后调用对应的注解处理器解析和处理这些注解。
注解处理器可以用于以下目的:
常见的库如,EventBus,Dagger,Retrofit 等都使用了注解处理器来生成代码。
AbstractProcessor是注解处理器的基类,它可以提供给开发者来自定义自己的注解处理器,在编译时处理注解。它是一个抽象类,封装了很多底层细节,为开发者提供了一种方便的方式来实现注解处理器处理注解。开发者只需要继承并实现其process方法,来定义如何处理特定的注解。所以总的来说开发中可以通过AbstractProcessor来快速实现一个自定义的注解处理器。下面介绍一下这个类的一些基本属性和方法。
AbstractProcessor是Java标准库的一部分官方文档 AbstractProcessor - Java SE 11 Documentation 跟随不同的Java版本。
parameters: annotations - 请求处理的注解类型,即当前方法处理那些注解。
roundEnv - 当前和前一轮的环境信息。roundEnv.getElementsAnnotatedWith可以获取到指定注解对应的Element。通过roundEnv可以获取注解相关的各种信息。
Returns:
表明当前处理器是否处理了这些注解。如果返回true表明注解已经被处理,后续的注解处理器不会再处理他们。
public Set<String> getSupportedAnnotationTypes() 表明处理器能够处理的注解类型。每个注解类型由其全限定名表示。如果没有支持的类型返回空集合。
例子:
@Override
public Set<String> getSupportedAnnotationTypes(){
Set<String> annotations = new LinkedHashSet<String>();
annotations.add(HolleWorld.class.getCanonicalName());
return annotations
}
@SupportedAnnotationTypes("com.ldx.annotationlib.BindView")
还可以使用注解来标明要处理的注解。该注解放在注解管理类的位置。
@SupportedAnnotationTypes("com.xxx.xxx.HolleWorld")
public class Myprocessor extands AbstractProcessor {
...
}
public SourceVersion getSupportedSourceVersion() 返回当前处理器支持的最新的代码版本。如果没有声明版本,则默认是SourceVersion.RELEASE_6, 一般返回SourceVersion.latestSupported()。
@Override
public SourceVersion getSupportedSourceVersion() {
return SourceVersion.latestSupported();
}
还可以使用注解来声明版本。该注解放在注解管理类的位置
@SupportedSourceVersion(SourceVersion.RELEASE_8)
public class Myprocessor extands AbstractProcessor {
...
}