Aop相关工具对比

工具简介原理特点相关资源
aspectJAspectJ是一个基于Java语言的AOP框架,提供了强大的AOP功能,其他很多AOP框架都借鉴或采纳其中的一些思想。AspectJ在代码编译期间,将需要集成的代码插入到目标代码的前面或者后面,以实现代码的AOP。详解👇不能直接用于android,需要配置一些gradle1.Jake Warton开发的日志打印工具;2.面向切面变成
cglib + dexmakercglib是一个功能强大,高性能的代码生成包。在Java开发中,动态代码可以使用Proxy类来通过反射代理接口(interface)实现,但cglib不仅仅能够代理接口,它能够为类的非final方法提供代理,为JDK的动态代理提供了很好的补充。cglib原理是通过字节码技术为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。由于是通过子类来代理父类,因此不能代理被final字段修饰的方法。cglib在android中是不能使用的。不过,网上已经有人根据dexmaker框架(dex代码生成工具)来仿照cglib库动态生成.dex文件,实现了类似于cglib的AOP的功能将cglib动态代理思想带入Android开发
Javassist For AndroidJavassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶滋)所创建的。 关于java字节码的处理,目前有很多工具,如BCEL,ASM。不过这些都需要直接跟JVM的操作和指令打交道。相比而言,Javassist要简单的多,完全是基于Java的API,但其性能相比前二者要差一些。尽管如此,在性能要求相对低的场合,Javassist仍然十分有用Javassist的官网为:http://jboss-javassist.github.io/javassist/ ;Javassist的使用方法可以参考:用 Javassist 进行类转换 Java动态编程之javassist
epic + dexposed田维术的epic这个项目的AOP原理完全不同于以上几个方案,以上几个方案都是Java开发中已有的技术方案,只不过是移植到了Android中来。它们的根本原理是修改编译生成的字节码文件,对原本的代码进行替换,从而实现了方法的AOP。它们都是在编译时就对代码实现动态代理,而epic这个项目是在运行对代码实现动态代理的,是不是很牛逼!它的主要思想是在native层修改java method对应的native指针。论文地址 ; art上method aop的实现xposed->dexposed->epicartHoot源码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值