前天早晨在公交车上,知乎搜索了下Android的最新技术,回答还是很多的,我们搞技术的,永远不能落后,要随时与市场保持同步,这样才能跟上市场的步伐。有朋友提到了一个AOP的面向切面的编程技术,从这个名字上,大概就可以知道是干什么的,也有很多朋友举例就是在日志打印、权限检查等比较散的地方,使用AOP可以实现统一管理,还是非常方便的。百度一下,也有好多大神写的关于AOP的详细介绍:
在AndroidStudio工具中开发的话,还需要编译build.gradle角本,详细情况可参考如下:
我们本博客的重点是了解清楚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注解是自己实现的,实现代码如下,非常简单:
package com.example.aoplib;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.CLASS;
@Target({TYPE,