Java中实现自定义的注解处理器(Annotation Processor)

在之前的《简单实现ButterKnife的注解功能》中,使用了运行时的注解实现了通过编写注解绑定View与xml。由于运行时注解需要在Activity初始化中进行绑定操作,调用了大量反射相关代码,在界面复杂的情况下,使用这种方法就会严重影响Activity初始化效率。而ButterKnife使用了更高效的方式——Annotation Processor来完成这一工作。

Annotation Processor即为注解的处理器。与运行时注解RetentionPolicy.RUNTIME不同,Annotation Processor处理RetentionPolicy.SOURCE类型的注解。在java代码编译阶段对标注RetentionPolicy.SOURCE类型的注解进行处理。这样在编译过程中添加代码,效率就非常高了。同样,Annotation Processor也可以实现IDE编写代码时的各种代码检验,例如当你在一个并未覆写任何父类方法的函数上添加了@Override注解,IDE会红线标识出你的函数提示错误。

实现步骤

使用Annotation Processor需要实现AbstraceProcessor这个抽象类,并配置工程引用这个Processor。
以下从Gradle编译工程及Eclipse中配置两方面介绍如何自定义并使用Annotation Processor。

Gradle编译环境:
1.实现Annotation Processor
2.配置Processor工程的META_INF文件
3.在开发的代码中使用自定义注解
4.配置gradle编译脚本,引入processor工程
5.进行项目构建,查看processor输出

Eclipse环境:
1.将Gradle环境编译出的processor.jar作为库引入到工程中
2.配置当前工程支持Annotation Processor,并使用自定义的processor.jar文件
3.开发代码使用自定义注解,查看IDE上提示信息

*IDEA环境的配置与Eclipse类似,官网上已经有比较详细的描述了,可以查阅Jetbrain的官方文档。

Gradle环境

构建工程目录

先来看一下processor工程的构建。
假设在HelloWorld工程中使用自定义的processor;独立于HelloWorld工程,我们独立开发了自定义的processor工程。项目结构如下:

MyProcessorTest
│          
├─MyProcessor
│  │  
│  └─src
│      └─main
│          └─java
│             └─com
│                 └─processor
│                         MyProcessor.java
│                         TestAnnotation.java
│                          
└─src
    └─main
        └─java
            └─com
                └─hello
                        HelloWorld.java

主工程名为MyProcessorTest,在其中包含了processor工程MyProcessor

实现自定义注解

接下来实现一个自定义注解TestAnnotation

package com.processor;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.SOURCE)
public @interface TestAnnotation {
   
    int value();
    String what();
}

注意注解的Retention是RetentionPolicy.SOURCE类型。

创建自定义Annotation Processor

然后来实现自定义的Annotation Processor——MyProcessor

package com.processor;

import java.util.Set;

import javax.annotation.processing.AbstractProce
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值