Android AOP实现原理全解析
来源:互联网 发布:我的世界多核优化 编辑:程序博客网 时间:2024/06/05 04:16
前天早晨在公交车上,知乎搜索了下Android的最新技术,回答还是很多的,我们搞技术的,永远不能落后,要随时与市场保持同步,这样才能跟上市场的步伐。有朋友提到了一个AOP的面向切面的编程技术,从这个名字上,大概就可以知道是干什么的,也有很多朋友举例就是在日志打印、权限检查等比较散的地方,使用AOP可以实现统一管理,还是非常方便的。百度一下,也有好多大神写的关于AOP的详细介绍:
深入理解Android之AOP
在AndroidStudio工具中开发的话,还需要编译build.gradle角本,详细情况可参考如下:
Android 基于AOP监控之——AspectJ使用指南
我们本博客的重点是了解清楚AOP的整个实现流程,是直接使用的别人的代码,代码也是在别人的博客中直接下载的,地址如下:
使用AspectJ在Android中实现Aop
Activity就一个,运行时就直接调用TestMain.TestAll()日志打印。我们先来看一下作者分module的用意。整个project分为aoplib、app、buildsrc、libinlib、testlib五个module,各module的意思应该也比较清楚,aoplib就是实现AOP功能的模块,app是本项目的启动模块,buildsrc是用来构建项目的模块,libinlib中作者只提供了一个TestLog类,而且只有一个方法,目的是用来测试AOP功能的,最后一个testlib是作者实现自己意图的模块,所有的测试类都是在这里的。我们要分析的重点就是aoplib和testlib这两个module了。
我们从程序的运行过程来一步步分析,首先看一下MainActivity类的onCreate方法,请注意,作者为这个方法上加了一个@DebugLog注解,@DebugLog注解是自己实现的,实现代码如下,非常简单:
从这里大家可以非常清楚的看到,MainActivity的onCreate方法已经被替换了,它是按照Aspect编译规则生成的,我们可以再来看看其他带有@DebugLog注解的类或者方法对应生成的class文件,比如TestMethodClass类的class文件,整个文件代码如下:
下面我们就来分析一个方法的执行过程,此项目中其他方法的实现是完全一样的,我们就以TestMethodClass类的spendTime1ms()为例来展开我们的分析,在编译完的class文件中,首先构造一个JoinPoint切点,Factory.makeJP()方法的实现就是使用传入的参数直接构造一个JoinPointImpl对象,第二句就是获取当前的Aspect处理类对象Hugo,此类必须要带有@Aspect注解,第三句就是构造方法执行的数组对象,第四句执行Aspect处理类的入口方法logAndExecute,Hugo类的完整代码如下:
好了,AOP的完整过程我们已经了解了,可以看出,整个执行过程还是比较简单的,就是使用了一个注解把我们的目标切点集中到一起进行处理,最后我们来总结一下,如果我们自己的项目要实现AOP的切面编程,应该要有几步:
1:我们要使用Aspect,肯定就需要有相应的jar包了,jar包的资源非常多,大家可以在网上随便下载。
2:要定义我们的切点,相当于本例中的DebugLog注解,它的@Target可以根据自己的需求来实现。
3:定义自己的Aspect处理类,此类必须带有@Aspect注解,需要在它里面定义切点函数,定义切点的处理函数,也就是本例中Hugo类的logAndExecute方法了,Hugo类中的其他两个方法enterMethod、exitMethod只是为了实现日志打印的目的而写的,大家可以根据自己的需求具体实现。
4:完成了上面两步,我们的项目中的Aspect框架就算搭建好了,下面就是添加切点了,也就是我们要在哪里切入的问题,可以通过添加我们自定义的注释来实现。
5:我们的所有功能都完成了,最后还一定要注意编译的方式要使用Aspect编译器,如果大家使用javac编译器的话,那生成的class文件中根本没有Aspect的代码,肯定也就无法实现我们的意图了。
- Android AOP实现原理全解析
- spring AOP 源码解析 及其实现原理
- spring aop原理解析
- AOP底层原理解析
- Android LruCache 实现原理解析
- Android MultiDex实现原理解析
- Android MultiDex实现原理解析
- Servlet原理全解析
- Spring AOP的实现原理之<aop:aspectj-autoproxy />的解析
- Spring AOP的实现原理之<aop:aspectj-autoproxy />的解析
- spring AOP实现原理
- AOP实现原理
- AOP实现原理机制
- AOP原理与实现
- Spring AOP 实现原理
- aop的实现原理
- Spring AOP 实现原理
- Spring Aop 实现原理
- 4003: [JLOI2015]城池攻占
- JPA中使用联合主键产生的若干问题
- 十一月英语——还得坚持练
- [仿南航app开发日记1]开篇-总体布局分析
- Java基础之字符串创建于存储的机制
- Android AOP实现原理全解析
- 证书转化 .crt - .cer
- liunx内核头文件位置概述
- JavaScript中for..in循环陷阱介绍
- Ubuntu 16.04 配置网桥--参考+理解
- SSL JudgeOnline 1786——麻将游戏
- CodeForces 652B z-sort
- OpenGL学习01_Mac OS X环境搭建
- bootstrap框架学习笔记四(按钮、导航、导航条)