0

我的查询与使用 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

4

1 回答 1

0

主要问题是对象首先使用“new”指令创建,然后调用构造函数。您必须同时替换“new”和构造函数调用,这可能很难实现。如果您想走这条路,请务必查看 ASM 文档中的第 8 章(树 API -> 方法分析)第 115 页。

但是,如果这足够了,您可以简单地添加对静态方法的调用来执行一些后实例化逻辑,这相当简单。只需找到构造函数调用,然后将静态调用添加到方法中,该方法以 SampleClass2 作为参数并返回 SampleClass2 (可能是相同的实例)

于 2013-02-15T06:38:22.590 回答