class A extends B{
public void a(){
super.a();
System.out.println("hello");
}
}
我想使用javassist在super.xxx之后插入一些代码,例如:
class A extends B{
public void a(){
super.a();
System.out.println("inject"); // javassist
System.out.println("hello");
}
}
如果原始代码不包含super.xxx,那么只需注入代码使用method.insertBefore。
我的问题是如何识别该方法是否包含" super.xxx" 如何插入代码,如上所述。
答案 0 :(得分:0)
根据您的代码,它看起来是您要插入代码的方法的结尾,以便您可以使用ClassPool
insertAfter()
方法在特定方法的末尾添加行。
此外,您可以使用insertAt()
方法,但它始终在指定的行号之前插入。
答案 1 :(得分:0)
Javassist允许您使用CtBehavior::insertAt
方法在特定行号处添加代码。但请注意,这需要您编译代码with the -g
option以包含此类行号信息。另请注意,这通常不是一个好方法,因为更改代码会破坏程序或在错误的时间触发代码。
您是否在调用super方法后尝试执行代码?如果是,请尝试使用B
检测超类CtBehavior::insertAfter
以包含以下代码:
if (this instanceof A) {
// your code goes here.
}
这会产生相同的效果,但对行号更改很有效。