查看Java动态代理生成的类
声明:非常感谢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的原因。