真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

java怎么查看jvm中動態(tài)代理class類內(nèi)容

本篇內(nèi)容介紹了“java怎么查看jvm中動態(tài)代理class類內(nèi)容”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)建站從2013年開始,先為隨縣等服務(wù)建站,隨縣等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為隨縣企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

在看dubbo源碼時,發(fā)現(xiàn)dubbo調(diào)用過程設(shè)計到了很多動態(tài)代理類技術(shù),但是這些動態(tài)代理類都是運行在內(nèi)存中的,沒有生成class文件,不了解到這些動態(tài)代理類的內(nèi)容,就不知道他的調(diào)用過程是什么?

下面例子中是我對mybatis框架的調(diào)試,我們都知道m(xù)ybatis框架操作數(shù)據(jù)庫需要寫mapper.xml和mapper.java接口,持久層實現(xiàn)類可直接注入mapper.java類并進(jìn)行調(diào)用方法操作數(shù)據(jù)庫,mybatis它是如何將mapper.java接口類進(jìn)行包裝供調(diào)用的呢?

主要工具:jvm的HSDB工具

操作系統(tǒng):windows系統(tǒng)

jdk版本:jdk1.8

1、斷點

dubug模式下,代理對象上下斷點,這一步主要是方便獲取代理類的類名,大家直接打印出來也可以。斷點操作是防止代理類會變。

System.out.println("***&&&&&&&&&&&"+userMapper.getClass().getName());

java怎么查看jvm中動態(tài)代理class類內(nèi)容

2、查看進(jìn)程ID

jps命令查看當(dāng)前程序的進(jìn)程ID值,注意程序如果有重啟,進(jìn)程id是會變的。

那如果確定進(jìn)程id呢?很簡單,在項目未啟動時,jps看下,項目啟動后,jps看下,多了那個進(jìn)程id就是我們需要的id值了。

我當(dāng)前程序啟動進(jìn)程是38916。

java怎么查看jvm中動態(tài)代理class類內(nèi)容

3、啟動jvm中HSDB工具

hsdb是jvm自帶的工具,所以前提要把jdk安裝好,環(huán)境配置好。

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

4、配置HSDB

點擊【File】-->【Attach to hotspot process】-->輸入進(jìn)程id-->【ok】

java怎么查看jvm中動態(tài)代理class類內(nèi)容

java怎么查看jvm中動態(tài)代理class類內(nèi)容

5、獲取代理對象類名

我斷點userMapper對應(yīng)代理類的類名是$Proxy18@4954。圖片中顯示的很明顯。

java怎么查看jvm中動態(tài)代理class類內(nèi)容

6、根據(jù)代理類類名在JVM中查看class

點擊【Tools】-->【Class Browser】-->輸入代理類類名

這里userMapper對象顯示代理類類名是$Proxy18,下面查找出來一個。

java怎么查看jvm中動態(tài)代理class類內(nèi)容

7、生成class

點擊查找出來的class,再點擊【Create .class File】,此操作會在本地生成一個class文件。

java怎么查看jvm中動態(tài)代理class類內(nèi)容

8、class反編譯

默認(rèn)生成的class文件在c盤,我的目錄是在C:\Users\Lu\com\sun\proxy\$Proxy18.class,仔細(xì)看下,生成路徑它是根據(jù)包名生成相應(yīng)的目錄。

jd-gui.exe反編譯工具編譯不成功。

我是直接將class文件copy到idea工具,某個項目的target/class目錄下,讓idea工具反編譯??吹絪electByNumb方法了,說明這個類正是我要找userMapper的代理類。

java怎么查看jvm中動態(tài)代理class類內(nèi)容

通過這次反編譯結(jié)果,可以明白:

1、為什么Proxy.newProxyInstance生成代理類時,要傳入InvocationHandler類,是如何調(diào)到invoke()方法的。因為代理對象對方法的實現(xiàn)是直接調(diào)用handler.invoke方法的。

2、為什么mybatis寫的mapper.java接口類,可以直接注入并調(diào)用,因為mybatis對每個mapper.java接口類,生成了代理對象是實現(xiàn)了這個接口的。

“java怎么查看jvm中動態(tài)代理class類內(nèi)容”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!


本文標(biāo)題:java怎么查看jvm中動態(tài)代理class類內(nèi)容
本文來源:http://weahome.cn/article/jhpgpj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部