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