将JDK动态代理生成的类保存为 .class文件System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");
无效,没有看到相应的字节码文件,这是因为System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");
为jdk8版本及之前的设置。
1.jdk8及之前的设置:
- 在程序中使用了System.setProperty对变量进行设置
System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");
或者在运行时加入jvm 参数 -Dsun.misc.ProxyGenerator.saveGeneratedFiles=true
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20201221133908466.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01yWXVzaGl3ZW4=,size_16,color_FFFFFF,t_70&x-oss-process=image/resize,w_1400/format,webp)
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20201221134057119.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01yWXVzaGl3ZW4=,size_16,color_FFFFFF,t_70&x-oss-process=image/resize,w_1400/format,webp)
ps:如果配置了-Dproperty=value参数,又在程序中使用了System.setProperty对同一个变量进行设置,那么以程序中的设置为准。
2.jdk8之后的设置:
在程序中使用了System.setProperty对变量进行设置
System.setProperty("jdk.proxy.ProxyGenerator.saveGeneratedFiles", "true");
或者
System.getProperties().put("jdk.proxy.ProxyGenerator.saveGeneratedFiles", "true");
或者在运行时加入jvm 参数 -Djdk.proxy.ProxyGenerator.saveGeneratedFiles=true
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20201221134633436.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01yWXVzaGl3ZW4=,size_16,color_FFFFFF,t_70&x-oss-process=image/resize,w_1400/format,webp)
运行效果:
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20201221135106311.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L01yWXVzaGl3ZW4=,size_16,color_FFFFFF,t_70&x-oss-process=image/resize,w_1400/format,webp)
可以看到自动生成了com.sun.proxy包路径并在其包路径下创建了动态代理生成的.class文件
3.如何知道是jdk.proxy.ProxyGenerator.saveGeneratedFiles
3.如何知道是jdk.proxy.ProxyGenerator.saveGeneratedFiles
如果不确定,查看ProxyGenerator类内容,如下:
红圈中的内容即是自己当前jdk版本对应的设置参数。