我的查询与使用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 :(得分:0)
主要问题是首先使用" new"创建对象。指令,然后调用构造函数。您必须更换" new"和构造函数调用,这可能很难实现。如果您想沿着这条路前进,请务必查看ASM文档中的第8章(树API - >方法分析)第115页。
但是,如果确实如此,您可以简单地添加对静态方法的调用来执行一些后实例化逻辑,这非常简单。只需找到构造函数调用,然后向方法添加静态调用,该方法将SampleClass2作为参数并返回SampleClass2(可能是同一个实例)