APT
APT(Annotation Processing Tool)即注解处理器,是一种注解处理的工具,用来在编译期扫描以及处理注解。以注解作为桥梁,通过预先设定好的代码规则来生成对应的Java代码。实际开发中有很多开源框架都是用到APT,例如ButterKnife,Dagger2,EventBus,Spring框架等。
APT原理:在注解了某些代码元素(字段、函数、类)后,编译器检查AbstractProcessor的子类,自动调用process()方法,将所有添加了指定注解的元素传递给该函数,在根据这些元素通过Java规则生成对应的Java代码。
AOP
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程。所以这里所代表的其实是一种思想,实现这个思想的技术有:ASPECTJ,ASM,JAVASIST,主要是这三个派系。
把相同的代码,多处使用的地方提取出来,就像一个圆从一个切点划一个切线形成一个切面。
由于面向对象的编程思想推崇高内聚、低耦合的架构风格,使得模块间代码的可见性变差,这使得实现下面的需求变得十分复杂:统计埋点、日志输出、权限拦截、 数据校验、 行为拦截等等,如果手动编码,代码侵入性太高且不利于扩展,AOP技术应运而生。
除了织入代码,AspectJ还能为类增加实现接口、添加成员变量。
VS
| 能力 | APT | AOP |
|---|---|---|
| 创建新类 | y | y |
| 修改当前类 | n | y |
| 实现技术 | AutoService | ASPECTJ,ASM,JAVASIST |
| 注解 | y | y |
| sdk代码修改 | n | y |