AOP(面向切面编程)方案
AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
主要用途
日志记录,性能统计,安全控制,事务处理,异常处理等等。
将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变
这些行为的时候不影响业务逻辑的代码。
AspectJ(不推荐,不支持 kotlin)
它在代码的编译期间扫描目标程序,根据切点(PointCut)匹配,将开发者编写的Aspect程序编织(Weave)到目标程序的.class文件中, 对目标程序作了重构(重构单位是JoinPoint), 目的就是建立目标程序与Aspect程序的连接(获得执行的对象、方法、参数等上下文信息),从而达到AOP的目的。
Transform API
能力
在编译器生成.class文件之后,混淆之前,获取class文件并进行修改 比如Android打包过程的混淆就是依靠Transform API技术来完成的
相关框架
ASM
Transfrom API获取到class文件后通过ASM框架完成字节码的修改
相关库
- Hunter
- ByteBuddy
相关文章
Javassist API
Javassist相比于ASM
- JavassistAPI比ASM友好,ASM性能是Javassist的五倍左右