AnnotationProcessor的使用总结

以下内容主要讲解EventBus、Retrofit、Dagger2、ButterKnife等流行第三方库都在使用的AnnotationProcessor技术.

一 AnnotationProcessor工作流程

通过解析在源码中使用注解标记的类/变量/方法,生成所需的工具类,以摆脱繁琐重复的手工代码.

注解(也被成为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据。
用于标注注解的注解叫做元注解,用于描述注解的使用范围,生命周期,继承关系等.

二 注解通常在项目中有两种用处
  1. 运行时注解. 在程序运行时,通过反射机制拿到注解相关信息进行相关操作,效率不高.
  2. 编译时注解.在程序编辑阶段,通过注解获取相关信息,生成相应的工具代码.不影响运行时的效率.
AnnotationProcessor的使用总结_第1张图片
Java注解基础知识
三 项目为什么要使用APT

为了满足项目在不同场景中的需求,目前主要满足两个:

  1. 事件绑定与解绑.
    原先事件通信是通过RxJava2,但是每次事件绑定和解绑都要手动操作,所以使用注解完成.
  2. 页面信息携带.
    最近两周的工作主要是使用注解完成页面跳转时信息的传递与解析.
    借鉴Dart和ARouter项目,重复造轮子的原因是:
    a. 需要默认传递一些页面信息.
    b. 不能满足页面返回信息的打包及解析.
    c. 自己写有利于拓展.
    未来考虑实现h5与native的跳转.
四 技巧
  1. 运行时注解的解析器只能是Java-library.但是可以使用android相关的api.
  2. auto-service第三方库可自动生成Processor配置
  3. java-poet可通过Builder模式辅助生成Java文件.

MethodSpec 代表一个构造函数或方法声明。
TypeSpec 代表一个类,接口,或者枚举声明。
FieldSpec 代表一个成员变量,一个字段声明。
JavaFile包含一个顶级类的Java文件。

  1. 在编写解析器时,主要用到以下三个工具类:
    private Filer filer; //文件相关的辅助类
    private Elements elementUtils; //元素相关的辅助类
    private Messager messager; //日志相关的辅助类
    最重要的是Element元素,相当于 XML 中的 DOM 树,可以通过一个元素去访问它的父元素或者子元素。

  2. 感想
    APT不是特别高深的技术,它提供了一种在编译时解析注解并生成模版工具类的开发方式,挺异想天开,让人称奇的:)

你可能感兴趣的:(AnnotationProcessor的使用总结)