我们大致梳理下,下载的编译期框架,都有下面这些,不全但比较有名
- Dagger2
- Room
- ARouter ------JavaPoet 生成
- ButterKnife
- EventBus ------ 传统方式一行一行生成
了解APT是什么?
APT(Annotation Processing Tool)
是一种处理注释的工具,它对源代码文件进行检测找出其中的Annotation,根据注解自动生成代码, 如果想要自定义的注解处理器能够正常运行,必须要通过APT工具来进行处理。 也可以这样理解,只有通过声明APT工具后,程序在编译期间自定义注解解释器才能执行。
通俗理解:根据规则,帮我们生成代码、生成类文件
APT中用到的重要元素
PackageElement
表示一个包程序元素。提供对有关包及其成员的信息的访问
ExecutableElement
表示某个类或接口的方法、构造方法或初始化程序(静态或实例)
TypeElement
表示一个类或接口程序元素。提供对有关类型及其成员的信息的访问。
VariableElement
表示一个字段、enum 常量、方法或构造方法参数、局部变量或异常参数
APT中用到API
属性名 | 描述 |
---|---|
getEnclosedElements() | 返回该元素直接包含的子元素 |
getEnclosingElement() | 返回包含该element的父element,与上一个方法相反 |
getKind() | 返回element的类型,判断是哪种element |
getModifiers() | 获取修饰关键字,入public static final等关键字 |
getSimpleName() | 获取名字,不带包名 |
getQualifiedName() | 获取全名,如果是类的话,包含完整的包名路径 |
getParameters() | 获取方法的参数元素,每个元素是一个VariableElement |
getReturnType() | 获取方法元素的返回值 |
getConstantValue() | 如果属性变量被final修饰,则可以使用该方法获取它的值 |
工作原理
APT 编译的时候 ---> 处理注解
APT 传统方式 ---> 生成 java文件
APT JavaPoet方式 --> 生成Java文件
传统方式 那些 开源项目有用到?
类似EventBus源码就知道了
传统方式:优点(编程的流程写下去) 缺点(没有oop思想加入进来)
JavaPoet是什么?
JavaPoet是square推出的开源java代码生成框架,提供Java Api生成.java源文件 这个框架功能非常实用,也是我们习惯的Java面向对象OOP语法 可以很方便的使用它根据注解生成对应代码
通过这种自动化生成代码的方式, 可以让我们用更加简洁优雅的方式要替代繁琐冗杂的重复工作
项目主页及源码:https://github.com/square/javapoet
JavaPoet相关API
类对象 | 说明 |
---|---|
MethodSpec | 代表一个构造函数或方法声明 |
TypeSpec | 代表一个类,接口,或者枚举声明 |
FieldSpec | 代表一个成员变量,一个字段声明 |
JavaFile | 包含一个顶级类的Java文件 |
ParameterSpec | 用来创建参数 |
AnnotationSpec | 用来创建注解 |
ClassName | 用来包装一个类 |
TypeName | 类型,如在添加返回值类型是使用 TypeName.VOID |
$S 字符串,如:$S, ”hello”, | |
$T 类、接口,如:$T, MainActivity |
JavaPoet到底是什么?
oop思想方式:优点(加入oop思想) 缺点(不习惯,倒序)
JavaPoet对比.pngJavaPoet真的比传统方式好吗?
并不是这样的,如果复杂的代码生成,反而效率低下.发展趋势,oop思想,真正的掌握JavaPoet,非常受用
看下一般的模块思路
架构大多数用到的套路.pngarouter-annotation
存放所有的注解
arouter-compiler
注解处理器,APT。服务,盯着整个项目,如果你在编译,我就知道
网友评论