注解处理器(APT)技术使用

本文介绍了Java的注解处理器(APT)技术,包括基本概念、注解定义与元注解,如Retention和Target。接着讲解了APT的工作原理和如何创建注解处理器,通过实例展示了如何利用APT自动生成代码,以提高开发效率。文章最后通过仿制ButterKnife框架的简化版CopycatKnife,详细阐述了APT的完整流程,包括创建注解、处理器、公开API和配置文件的使用。
摘要由CSDN通过智能技术生成

基本概念

APT 全称为 Annotation Processing Tool,可翻译为注解处理器,APT 工具是用于注解处理的命令行程序,它可以找到源码中对应注解的对象并使用注解处理器对其进行处理。
一般来说,我们会使用 APT 生成一些源码,然后加入编译目录进行编译,从而简化开发周期。

注解

注解处理器是基于注解(Annotation)的,实际开发中自定义注解用的比较少,这里先简单的复习下相关概念。
Java 注解是 Java1.5 中引入的概念,是用来标注代码的元数据。

定义一个注解

定义一个注解使用 @interface 关键字。

public @interface Test {
   }

对,这样一个名为 Test 的注解就定义好了。

元注解

元注解是注解的注解,用来标注注解的元数据。
可以通过元注解来控制注解的一些属性与行为。
Java 中元注解共有四种:Retention、Inherited、Documented、Target。

Retention

Retention 表示注解的保留范围,取值为枚举类:RetentionPolicy,其中一共包括如下三个类型。

  • SOURCE:注解只保留在源文件中,编译时就会把注解丢弃。
  • CLASS:默认值,注解保留到 class 文件中,运行时会丢弃。
  • RUNTIME:注解将会一直保留到运行时,可以通过反射获取到该注解。

Target

Target 用于控制注解的使用范围,取值为枚举类:ElementType。

  • TYPE: 该注解作用于类,接口或枚举类上
  • FIELD: 作用于类属性或对象属性也可以为枚举实例
  • METHOD: 作用于函数
  • PARAMETER: 作用于函数参数
  • CONSTRUCTOR: 作用于构造器
  • PACKAGE: 作用于包名
  • LOCAL_VARIABLE: 作用于变量
  • ANNOTATION_TYPE: 作用于注解
  • TYPE_PARAMETER: Java 1.8 引入,作用于类型参数例如:
@Target(ElementType.TYPE_PARAMETER)
public @interface Test {
   }

class TypeTest<@Test T>{
   }
  • TYPE_USE: Java 1.8 引入,作用于各种类型,也就是说,任何使用类型的地方都可以使用该注解。
@Target(ElementType.TYPE_USE)
public @interface Test {
   }

public class A {
   }

public class B extends @Test A {
   
    public @Test int add(@Test int a, @Test int b) {
   
        @Test int result = a + b;
        System.out.println(result);
        return result;
    }
}

Documented

Documented 用于描述该注解是否需要加入到例如 javadoc 工具生成的文档的公共 API 中,使用 Documented 的注解将会被保留在生成的文档中。

Inherited

使用 Inherited 元注解的注解修饰的类,子类将会继承这个注解,这么说有点绕,举个栗子。
首先定义注解 Test,且使用 @Inherited 元注解修饰。
然后定义一个 Father 类,使用 @Test 注解修饰,再定义一个 Son 类继承了 Father 类,那么 Son 也会拥有注解 Test。

OK,注解就说完了,回归正题,开始介绍 APT。

APT

APT 的原理就是在需要使用的元素上(类、变量、方法、参数等)加上我们的注解,然后在编译时把使用了这个注解的元素都收集起来,做统一的处理,例如根据元素生成对应的工具类,以此提高开发效率。

创建一个注解处理器分为如下几步:

  • 创建注解类
  • 创建一个继承自 AbstractProcessor 的类,这就是 APT 的核心类
  • 创建公开 API 及辅助工具
  • 创建配置文件
  • 使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值