JavaPoet 结合 Java 注解在很多知名的开源库中都应用,例如 Butterknife 和 ARouter.
JavaPoet 是用来生成 .java 文件的,它的使用比较简单,按照官方的示例代码套用就可以了。
Java 的注解,有时间会整理,这里先略过。
我做了一个 Dome 说明它们的应用。
先看一下项目的结构。
整个项目包含三个部分:
- app : 主项目,使用我们的注解
- annotationlib: 注解
- javapoetlib: 使用 javaPoet 生成 .java 代码
下面我们一个个来看
1. 注解
我们先生成一个 java library 生成注解, 这里不能选 android library, 命名为 annotationlib.
它的 build.gradle 文件我们不用修改, 我们看到它是 java-library
1 | apply plugin: 'java-library' |
创建一个名为 MyAnnotation 的接口文件, 它的内容也是非常简单的
1 | (ElementType.METHOD) |
2. JavaPoet 生成 .java 文件
同样创建一个 java library, 命名为 javapoetlib, 但是它的 build.gradle 文件,我们要修改
1 | apply plugin: 'java-library' |
我们添加对刚刚创建的 annotationlib 依赖,同时添加 auto-service 和 javapoet.
我们创建一个 MyProcessor 的文件
1 |
|
相关的信息,可以看上面代码的注释
- 主要是添加 auto 的注解
1 | (Processor.class) |
- 版本号
1 | public SourceVersion getSupportedSourceVersion() { |
- 注解的类型
1 | public Set<String> getSupportedAnnotationTypes() { |
在 process 方法中使用 JavaPoet 中的方法,生成一个输出 Hello world 的代码,这是一个官方的实例代码,关于 JavaPoet 的使用,可以去 JavaPoet github 主页 去查询。
3. 项目中对注解的使用
在项目中对上面两个 java library 引用
1 | dependencies { |
在 activity 中使用 annoation 注解
1 | public class MainActivity extends AppCompatActivity { |
现在所有的准备工作都做好,我们选择 Make Project 即可,然后我们在 app/build/generated/source/apt/debug 目录下看到生成的 hello world 文件了