当前位置: 首页 > 科技观察

查看三招运行JavaClass源码

时间:2023-03-18 10:55:01 科技观察

我在网上跑了一个应用,总感觉运行结果和你预想的不一样,代码好像和你本地的不一致。怎么办,咬咬牙,停下来,重新上网?够麻烦的,马不停蹄学习几种查看Java应用类源码的方法。和程咬金的功夫一样,我们也有查看Class源码的三招。一般我们要查看一个正在运行的程序的Class源码,大致会经过三个步骤:1.定位并找到Class2.将远程class文件下载到本地3.反编译查看源码。这个过程应该很容易。显然,我们先关注第一步和第二步,如何找到这个类并下载到本地。对于查找Class,如果是自己开发的代码,而不是编译时或运行时增强生成的,那么直接在远程服务器上搜索,下载到本地就可以了。对于在编译时和运行时增强的类,甚至是动态生成的类,比如像OpenJPA和Spring/Cglib这样的动态代理,上面的方法是没有用的。这种情况可以直接使用JDK的神器SA工具(microscopeServiceabilityAgentforJavavirtualmachine),直接在Class浏览器中搜索,然后选择create.classfile。默认情况下,该文件将保存到SAJar所在的目录中。但缺点是SA连接时,应用会挂起,直到断开连接。另一种方法是各种增强类库默认提供保存生成类的配置。如果启用此选项,生成的和增强的类将在本地编写。比如像Cglib,你可以在System.property中设置。System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY,".");cglib在运行时判断配置,打开时会将生成类的class二进制文件写入本地。如果类库不存在或者你没有找到这个选项,而你真的想检查它,你可以在JVM上附加一个JavaAgent。使用Instrument或者ByteBuddy不用Jar包就可以挂了。参考上一篇文章(Agent不用Jar包?几行代码实现运行时增强)。有了Agent变形金刚,就由你来展示你的才华了。本文转载自微信公众号“Tomcat物语”,可关注下方二维码。转载此文请联系Tomcat那些东西公众号。