一、AnnotationProcessorFactory
Annotation Processor用于在编译期间处理注释信息。AnnotationProcessorFactory(以下简称APF)是将Annotation Processor与javac编译器进行连接的接口。APF将java文件传递给Annotation Processor并返回它处理器处理后的结果。
APF主要有三个方法:
public Collection supportedOptions(); //返回可支持的命令行选项 public Collection supportedAnnotationTypes(); //返回支持处理的所有注释类型 public AnnotationProcessor getProcessor(String annotationType); //根据注释类型返回对应的Annotation Processor处理器实例
APF的实现示例:
@SupportedAnnotationTypes("com.example.TestAnnotation")
public class TestAnnotationProcessorFactory extends AbstractProcessor implements AnnotationProcessorFactory {
@Override
public Collection supportedOptions() {
return Collections.emptySet();
}
@Override
public Collection supportedAnnotationTypes() {
return Collections.singleton(TestAnnotation.class.getCanonicalName());
}
@Override
public AnnotationProcessor getProcessorFor(Set atds, AnnotationProcessorEnvironment env) {
return new TestAnnotationProcessor(env);
}
}
二、Annotation Processor
Annotation Processor是Annotation Processing工具的核心部分。它可以用于检索、分析和处理注释信息。关于Annotation Processor的实现,需要实现以下步骤:
1. 通过编写标记注释,选择需要处理的对象
2. 创建Annotation Processor类来处理标记注释
3. 在META-INF/services/javax.annotation.processing.Processor文件中为Annotation Processor指定类名
Annotation Processor的实现示例:
@SupportedAnnotationTypes("com.example.TestAnnotation")
public class TestAnnotationProcessor extends AbstractProcessor {
private AnnotationProcessorEnvironment env;
public TestAnnotationProcessor(AnnotationProcessorEnvironment env) {
this.env = env;
}
@Override
public boolean process(Set annotations, RoundEnvironment roundEnv) {
//TODO 处理标记注释
return true;
}
}
三、Annotation Processor Environment
Annotation Processor Environment(以下简称APE)是Annotation Processor的执行环境,它提供了用于与编译器交互的API。
APE主要有以下API:
public TypeElement getTypeElement(CharSequence name); //根据名称返回类型元素 public boolean isSource(Element element); //返回元素是否源文件中定义的 public Filer getFiler(); //返回用于创建新文件、类或其他资源的Filer public Messager getMessager(); //返回用于报告错误、警告和其他消息的Messager public Map getOptions(); //返回options参数的映射,这些参数可以在APF中处理
APE的使用示例:
public class TestAnnotationProcessor extends AbstractProcessor {
private Filer filer;
private Messager messager;
@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
filer = processingEnv.getFiler();
messager = processingEnv.getMessager();
}
@Override
public boolean process(Set annotations, RoundEnvironment roundEnv) {
TypeElement testAnnotationElement = processingEnv.getElementUtils().getTypeElement("com.example.TestAnnotation");
//TODO 处理标记注释
return true;
}
}
四、annotation processor – csdn
annotation processor – csdn是一个开源的Annotation Processor集合库。使用这个库可以方便地完成Annotation Processing的工作。
annotation processor – csdn主要有以下特点:
1. 提供了一组常用的Annotation类型的处理器
2. 可以根据自己的需求扩展Annotation类型和Annotation Processor
3. 可以在命令行或Gradle插件中使用
annotation processor – csdn示例:
compile 'com.bugdim88.processor:annotation-processor-csdn:1.0.3'
@Retention(RetentionPolicy.CLASS)
public @interface TestAnnotation {
String value();
}
@AutoService(Processor.class)
public class TestAnnotationProcessor extends BaseProcessor {
private ProcessingEnvironment processingEnv;
@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
this.processingEnv = processingEnv;
}
@Override
public Set getSupportedAnnotationTypes() {
Set types = new HashSet();
types.add(TestAnnotation.class.getCanonicalName());
return types;
}
@Override
public boolean process(Set annotations, RoundEnvironment roundEnv) {
for (TypeElement element : ElementFilter.typesIn(roundEnv.getElementsAnnotatedWith(TestAnnotation.class))) {
//TODO 处理标记注释
}
return true;
}
}
五、结语
Annotation Processor是在编译期对注释信息进行处理的工具,能够有效地提高代码的可读性和可维护性。Annotation Processor Factory是Annotation Processor和javac编译器之间的连接接口,Annotation Processor是Annotation Processing工具的核心部分,Annotation Processor Environment是Annotation Processor的执行环境,annotation processor – csdn是一个开源的Annotation Processor集合库。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/249104.html
微信扫一扫
支付宝扫一扫