2013-02-14 43 views
0

我的查詢與使用ASM的字節碼操作有關。使用ASM字節碼操作將方法中的構造函數調用包裝爲靜態調用

我有一個方法如下: -

/*Original method code*/ 
String str ="abs";  
// create object of SampleClass2 // constructor calling 
SampleClass2 sample = new SampleClass2(); 
// call instance method   
sample.PrintMe(str); 

在上述方法中,我想將SampleClass2()構造改變爲一個靜態方法調用,這將做一些邏輯後返回相同SampleClass2對象。所以之後我的方法會看起來像這樣。

/* 
* After bytecode manipulation* 
*/ 
String str ="abs"; 
// get a constructor using static call 
SampleClass2 sample = StaticClass.getSampleClass2Object(); 
sample.PrintMe(str); 

請告訴我如何使用ASM字節碼操作來實現這一點。我們是否需要像現在一樣改變現有的字節碼堆棧DUP

回答

0

主要的問題是首先用「new」指令創建對象,然後調用構造函數。您必須替換「新」和構造函數調用,這可能很難實現。如果您想沿着這條路走,請務必查看ASM文檔中的第8章(樹API - >方法分析)第115頁。

但是,如果這足夠了,您可以簡單地將一個調用添加到靜態方法來執行一些後實例化邏輯,這非常簡單。只需找到構造函數調用,然後將一個靜態調用添加到一個方法,然後將一個SampleClass2作爲參數,並返回一個SampleClass2(可能是同一個實例)

+0

感謝man for the information – 2013-02-19 07:29:04

相關問題