之前我们通过炒菜的方式简单介绍了AOP的一些应用范畴,下面我简单的笼络一下我在其他资料上查找出的一些结论:日志记录、业务埋点、持久化、性能监控、性能日志、数据校验、方法的参数校验、缓存、内存缓存和持久缓存、权限检查、业务权限(如登陆,或用户等级)、系统权限(如拍照定位)、异常处理等等多种作用。
常用的工具和库AspectJ:一个 JavaTM 语言的面向切面编程的无缝扩展(适用Android)。Javassist for Android:用于字节码操作的知名 java 类库 Javassist 的 Android 平台移植版。DexMaker:Dalvik 虚拟机上,在编译期或者运行时生成代码的 Java API。ASMDEX:一个类似 ASM 的字节码操作库,运行在Android平台,操作Dex字节码。
今天我来给大家讲解这么叼的东西怎么用。长话短说,请跟我飞完全程,我再一一细细说明。目前使用的比较多的是AspectJ,完全兼容java,也是领导推荐的,我就用它了哈哈。
首先第一步:要想使得扩展性好,使得很多人都可以用上我们使用AOP思想编出来的库,那么首先我们自然要建立一个android lib。
第二步:然后在build.gradle文件上加入依赖org.aspectj:aspectjtools:1.8.9,然后在导入org.aspectj.tools.ajc.Main、org.aspectj.bridge.MessageHandler、org.aspectj.bridge.IMessage
导入AspectJ tools
第三步:非常关键的一步
<pre>
android.libraryVariants.all { variant ->
JavaCompile javaCompile = variant.javaCompile
javaCompile.doLast {
String[] args = ["-showWeaveInfo",
"-1.5",
"-inpath", javaCompile.destinationDir.toString(),
"-aspectpath", javaCompile.classpath.asPath,
"-d", javaCompile.destinationDir.toString(),
"-classpath", javaCompile.classpath.asPath,
]
MessageHandler handler = new MessageHandler(true);
new Main().run(args, handler)
def log = project.logger
for (IMessage message : handler.getMessages(null, true)) {
switch (message.getKind()) {
case IMessage.ABORT:
case IMessage.ERROR:
case IMessage.FAIL:
log.error message.message, message.thrown
break;
case IMessage.WARNING:
case IMessage.INFO:
log.info message.message, message.thrown
break;
case IMessage.DEBUG:
log.debug message.message, message.thrown
break;
}
}
}
}
</pre>
哈哈,我们导入依赖的配置工作基本就完成啦。接下来我们就把上一篇文章Android炒菜现炒现卖之-------- AOP 环境搭建的内容写入就可以完美的实现炒菜的内容啦
基本流程图可以用下图解释,也是从网上找的,比较流行的图
网友评论