什么是Aop?
AOP指的是:面向切面编程(Aspect-Oriented Programming)。如果说,OOP如果是把问题划分到单个模块的话,那么AOP就是把涉及到众多模块的某一类问题进行统一管理。
代表框架:
- Hugo(Jake Wharton)
- SSH
- SpringMVC
Android 中应用
- 日志
- 持久化
- 性能监控
- 数据校验
- 缓存
- 按钮防抖
- 其他更多
Android AOP就是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,提高开发效率
使用姿势
在Java中使用aop编程需要用到AspectJ切面框架,AspectJ定义了AOP语法,它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。
1.在build.gradle文件中引入AspectJ
1 | pply plugin: 'com.android.application' |
2.创建注解类
1 | (RetentionPolicy.CLASS) |
3.创建切面类
1 | /** |
4.使用
1 | 2000) (clickIntervals = |
难点:
AspectJ语法比较多,但是掌握几个简单常用的,就能实现绝大多数切片,完全兼容Java(纯Java语言开发,然后使用AspectJ注解,简称@AspectJ。)
优点:
AspectJ除了hook之外,AspectJ还可以为目标类添加变量,接口。另外,AspectJ也有抽象,继承等各种更高级的玩法。它能够在编译期间直接修改源代码生成class,强大的团战切入功能,指哪打哪,鞭辟入里。有了此神器,编程亦如庖丁解牛,游刃而有余。
什么是Apt?
APT(Annotation Processing Tool 的简称),可以在代码编译期解析注解,并且生成新的 Java 文件,减少手动的代码输入
代表框架:
- DataBinding
- Dagger2
- ButterKnife
- EventBus3
- DBFlow
- AndroidAnnotation
使用姿势
1,在android工程中,创建一个java的Module,写一个类继承AbstractProcessor
1 | @AutoService(Processor.class) // javax.annotation.processing.IProcessor |
2,重写AbstractProcessor类中的process方法,处理我们自定义的注解,生成代码:
1 | public class SingleDelegateProcessor implements IProcessor { |
3,在项目Gradle中添加 annotationProcessor project 引用
1 | compile project(':apt-delegate-annotation') |
4,如果有自定义注解的话,创建一个java的Module,专门放入自定义注解。项目与apt Module都需引用自定义注解Module
4-1,主工程:
1 | compile project(':apt-delegate-annotation') |
4-2,apt Module:
1 | compile project(':apt-delegate-annotation') |
5,生成的源代码在build/generated/source/apt下可以看到
难点
就apt本身来说没有任何难点可言,难点一在于设计模式和解耦思想的灵活应用,二在与代码生成的繁琐,你可以手动字符串拼接,当然有更高级的玩法用squareup的javapoet,用建造者的模式构建出任何你想要的源代码
优点
它的强大之处无需多言,看代表框架的源码,你可以学到很多新姿势。总的一句话:它可以做任何你不想做的繁杂的工作,它可以帮你写任何你不想重复代码。懒人福利,老司机必备神技,可以提高车速,让你以任何姿势漂移。它可以生成任何源代码供你在任何地方使用,就像剑客的剑,快疾如风,无所不及
Aop和Apt对比
如图所示:
和
乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站