查看 Proxy 的 $ProxyX.class文件

方法一:

在调用动态代理的main方法中加上

System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");

方法二:

 1 public static void main(String[] args) {
 2         byte[] classFile = ProxyGenerator.generateProxyClass("$Proxy0", UserDaoImpl.class.getInterfaces());
 3         String path = "E:\\$Proxy0.class";
 4         try(FileOutputStream fos = new FileOutputStream(path)) {
 5             fos.write(classFile);
 6             fos.flush();
 7             System.out.println("代理类class文件写入成功");
 8         } catch (Exception e) {
 9             System.out.println("写文件错误");
10         }
11 }

 

这样在运行代码的时候就会在项目的根目录(或者指定目录)下生成 com.sun.proxy.$ProxyX.class 了,我们可以通过反编译来理解 Proxy 的处理过程。

可以看到$ProxyX.class是从Proxy派生过来的:

在实现对其业务方法调用时,是通过实现了InvocationHandler的业务类的invoke方法实现的,如下图:

 

 

CGLib动态生成的Class文件如何保存到本地磁盘:

在调用动态代理的main方法中加上:

System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "保存路径");

 

posted on 2019-07-01 17:42  小夏coding  阅读(296)  评论(0编辑  收藏  举报

导航