如何获取 动态代理类class 类文件的信息(无插件)

2022-07-02 08:36:59

在看dubbo源码时,发现dubbo调用过程设计到了很多动态代理类技术,但是这些动态代理类都是运行在内存中的,没有生成class文件,不了解到这些动态代理类的内容,就不知道他的调用过程是什么?

所以在网上找了很多的方式进行尝试,JDK 和 CGLIB 的方式比较简单,只需要进行参数配置

但是javassist的获取就很麻烦,下面将展示如何获取动态代理生成的类信息

主要工具:jvm的HSDB工具

操作系统:windows系统

jdk版本:jdk1.8

1.断点(让程序保持运行状态)

2.打开CMD 命令窗口输入 jps 找到相应的进程 (记住进程号)

 3.进程中继续输入

java -classpath "%JAVA_HOME%/lib/sa-jdi.jar" sun.jvm.hotspot.HSDB

上述的工具已经打开了

4、配置HSDB,File -> Attach to HotSpot process -> 输入进程号 确定

5、获取代理对象类名

我断点userMapper对应代理类的类名是Animal$Adaptive。图片中显示的很明显。

6、根据代理类类名在JVM中查看class

把原先弹出的东西关掉,点击【Tools】-->【Class Browser】-->输入代理类类名

这里userMapper对象显示代理类类名是$Proxy18,下面查找出来一个。

8、class反编译

默认生成的class文件在c盘,我的目录是在C:\Users\13340\org\alexsotob\dubbo\SPI\Animal$Adaptive.class,仔细看下,生成路径它是根据包名生成相应的目录。(注:实在找不到,就在C盘 搜索你的类名)

这里我是放入到Idea中进行查看,可以根据实际自己的需要看

  • 作者:妖四灵.Shuen
  • 原文链接:https://shuen.blog.csdn.net/article/details/106839615
    更新时间:2022-07-02 08:36:59