字节码工具asm应用的一个例子
字节码工具asm使用的一个例子
ASM 是一个 Java 字节码操控框架。它能够以二进制形式修改已有类或者动态生成类。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。
初识字节码,现学现卖。
示例中演示的功能:
jdk自带的代理(InvocationHandler)的不足:
ASM 是一个 Java 字节码操控框架。它能够以二进制形式修改已有类或者动态生成类。ASM 可以直接产生二进制 class 文件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。ASM 从类文件中读入信息后,能够改变类行为,分析类信息,甚至能够根据用户要求生成新类。
初识字节码,现学现卖。
示例中演示的功能:
- 生成被代理类的子类,并重写所有方法(除java.lang.Object类定义的方法),增加before和after拦截。
- 重新定义被代理类的所有属性(不包括属性的赋值)。
- 把生成的class文件保存到硬盘中。
- 从内存中加载新生成的class。
jdk自带的代理(InvocationHandler)的不足:
- jdk只能代理接口(被代理的类必须实现至少一个接口)。
- jdk提供的代理方法,不能拦截同一类中方法的调用。eg.A.method1(){this.method2();}此时method2将不会被拦截。