声明:非常感谢yy629 提供的帮助。原文:java的动态代理生成了什么?
要查看java动态代理生成的源文件,必须先导出字节码文件然后通过反编译(如jad工具)生成源文件。
如何导出动态代理生成的类的字节码文件(*.class)呢?
只需要在应用中添加下面一段代码:
Field field = System.class.getDeclaredField("props");
field.setAccessible(true);
Properties props = (Properties) field.get(null);
props.put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");
当运行该段代码的程序,会在使用了动态代理的类包中生成对应的动态代理类的字节码。
结论:动态代理类会自动地添加上toString,hashCode,equals方法,而且这三个方法都会调用InvocationHandler中的invoke方法。这就是为什么在生成的代理类中调用toString,hashCode,equals都会执行invoke的原因。