大家, 我想获取synchronized块参数,例如
String obj;
synchronized(obj){
...
}
如何使用Javassist在字节代码级别获取参数'obj'? 欢迎任何建议。
答案 0 :(得分:0)
您必须使用Javassist或ASM的低级API来分析字节码指令才能完成您想要的操作。
Object obj;
synchronized(obj){
//...
}
转换为
0: aload_0
1: getfield #2; //Field obj:Ljava/lang/Object;
4: dup
5: astore_1
6: monitorenter
...
monitorenter 指令是同步块和astore_1指令的开始,它将obj字段值放在堆栈顶部 - 这就是您要查找的值。