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后,调整为如下,是不是很简单呢?