使用javassist,我可以使用setBody()
更改整个方法内容。
有没有办法让replace
只是方法中的一个语句。
请找到以下代码:
ctClass.instrument(new ExprEditor() {
@Override
public void edit(FieldAccess fieldAccess)
throws CannotCompileException {
//System.out.println(fieldAccess.getFieldName());
if (fieldAccess.getFieldName().equals("out")) {
fieldAccess.replace(" { System.out.println(\"Manipulating.. \"); $_ = $proceed($$); } ");
}
}
}
我的目的是动态地“替换”主java程序中的System.out.println(" ");
。
当我尝试这样做时(上面的方法),我看到这种方法只是在方法的开头添加一行,就在它应该替换的System.out.println
之前。我的代码中仍存在先前的System.out.println
语句。
我在这里做错了吗?如果我能得到一些指示,那就太棒了。