保存JDK动态代理字节码的两种方式
如果我们要研究JDK动态生成的代理类,此时则需要将内存中的代理类作为.class文件保存到磁盘,再通过Java反编译工具查看其源码
(方式一)设置系统属性
在调用newProxyInstance之前将sun.misc.ProxyGenerator.saveGeneratedFiles系统属性设置为true,生成的代理类将被自动写入磁盘;class文件在 \Workspaces\项目名称\com\sun\proxy 路径下
public Object getProxy() {
System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true"); //设置系统属性
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), this);
}
(方式二)保存ProxyGenerator生成的字节流数组
直接通过ProxyGenerator的静态方法generateProxyClass(JDK源码中 P r o x y . n e w P r o x y I n s t a n c e \color{blue}{Proxy.newProxyInstance} Pr