ASM 是一个 Java 字节码操控框架。它能够以二进制形式修改已有类或者动态生成类。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。
不过ASM在创建class字节码的过程中,操纵的级别是底层JVM的汇编指令级别,这要求ASM使用者要对class组织结构和JVM汇编指令有一定的了解。
而EsotericSoftware的reflectasm帮忙跨过了这个障碍,使用ASM起来非常方便。
方法级别的反射原本如下写法:
Method method=instance.getClass().getMethod("addName"); method.setAccessible(true); method.invoke(instance, "Awesome McLovin"); method.setAccessible(false);
用Reflectasm后,调整为如下,是不是很简单呢?
Object instance =... MethodAccess access = MethodAccess.get(instance.getClass()); int addNameIndex = access.getIndex("addName",access.getParameterTypes()); access.invoke