初识字节码,现学现卖。
示例中演示的功能:
- 生成被代理类的子类,并重写所有方法(除java.lang.Object类定义的方法),增加before和after拦截。
- 重新定义被代理类的所有属性(不包括属性的赋值)。
- 把生成的class文件保存到硬盘中。
- 从内存中加载新生成的class。
jdk自带的代理(InvocationHandler)的不足:
- jdk只能代理接口(被代理的类必须实现至少一个接口)。
- jdk提供的代理方法,不能拦截同一类中方法的调用。eg.A.method1(){this.method2();}此时method2将不会被拦截。