国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Eclipse下Javassist正確使用方法代碼解析

Eclipse下Javassist正確使用方法代碼解析

2021-03-09 13:25三向板磚 Java教程

這篇文章主要介紹了Eclipse下Javassist正確使用方法代碼解析,javassist-3.15.0-ga.jar包是一款在java開發中十分重要的jar文件包,需要的朋友可以參考下,文中附下載鏈接。

這兩天看到Hibernate的代理部分,第一反應是底層使用了反射,針對用戶實體生成了代理類,后來反應過來了,反射沒有任何可以產生新類的能力,也就順理成章地找到了Javassist

在網上搜索到的大部分教程,都是針對Javassist的API進行一番講解,但是最后,往往沒有一個加載過程,而筆者模仿這些教程進行類的加載時,加載到的結果都是原來的類,并沒有產生字節碼被修改的內容。

在經過一番探索后,筆者發現,網上的大部分教程中的最后一步,保存字節碼,使用的均是writeFile的無參數重載,在查看其函數結構后發現,它還有一個String類型的重載,由于在Eclipse下,字節碼儲存的根位置并不是”.\\”而是”.\\bin”,而writeFile的另一個重載很可能是指定字節碼根位置的參數,筆者進行一番更改后發現,果不其然。

下面將演示代碼分享出來:

這是筆者項目的結構:

Eclipse下Javassist正確使用方法代碼解析

?
1
2
3
4
5
6
7
8
Editable.java:
package com.thrblock.javassist;
  
public class Editable {
   public void showInfo(){
       System.out.println("InfoDefault!");
   }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Main.java:
package com.thrblock.javassist;
import java.io.IOException;
import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.CtNewMethod;
import javassist.NotFoundException;
public class Main {
    public static void main(String[] args) {
        ClassPool pool = ClassPool.getDefault();
        try{
            pool.insertClassPath(".\\bin");
            //設置根路徑。(這里設置的根路徑顯然沒被writeFile使用)
            CtClass cc = pool.makeClass("com.thrblock.javassist.EditableChanged");
            //模擬Hibernate代理模式,我們創建一個新類
            cc.setSuperclass(pool.get("com.thrblock.javassist.Editable"));
            //設置其父類
            CtMethodcm = CtNewMethod.make("public void showInfo(){super.showInfo();System.out.println(\"CustomInsertHAHA!\");}",cc);
            //追加一個方法,注意它覆蓋了父類中的方法。
            cc.addMethod(cm);
            cc.writeFile(".\\bin");
            //這里比較重要,空參的結果就是沒有保存到eclipse字節碼根路徑里。
        }
        catch (NotFoundException | CannotCompileException | IOException e) {
            e.printStackTrace();
        }
        try{
            Class<?> cl = Class.forName("com.thrblock.javassist.EditableChanged");
            //加載我們的新類
            Editableed = (Editable) cl.newInstance();
            //由于其繼承與Editable類,這里和Hibernate里的load道理一樣。
            ed.showInfo();
            //調用方法。
        }
        catch (ClassNotFoundException | InstantiationException |IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

打印結果:

InfoDefault!

CustomInsertHAHA!

其他注意事項:

由于我們是生成了一個類,如果這個類名和原類名一樣,則會覆蓋class文件,但是如果修改之前該class已經被JVM裝入,則修改的部分不會生效,必須重啟JVM。

總結

以上就是本文關于Eclipse下Javassist正確使用方法代碼解析的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/shuzhe66/article/details/39319121

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日本中文字幕免费 | 久久777 | 成人av一区二区三区 | 99久久婷婷国产精品综合 | 乱人伦xxxx国语对白 | 欧美另类视频 | 在线国产一区二区 | 亚洲国产精品一区二区www | 日本乱偷中文字幕 | 国产精品久久久久久久 | 黄色小视频国产 | 成人高清网站 | 午夜电影网 | 精品1区2区 | 国产一区二区三区在线视频观看 | 99久久免费看精品国产 | 在线视频亚洲 | 免费大片黄 | 国产一区二区三区视频 | 国产精品国产成人国产三级 | 成人在线看片 | 成人在线欧美 | 99精品一区二区三区 | 色精品| av在线干 | 一级a毛片 | 国产黄色一级大片 | 日韩精品一区二区三区中文在线 | 蜜桃视频一区二区 | 色接久久 | 欧美理论视频 | 香蕉久久夜色精品国产使用方法 | 婷婷激情五月 | 欧美久久精品一级黑人c片 成人在线视频免费观看 | 中文字幕在线精品 | 久久九九 | 亚洲日韩中文字幕一区 | 动漫一区二区三区 | 亚洲成人久久久 | 99久久毛片免费观看 | 欧美激情一区二区三级高清视频 |