使用bytebuddy更改对参数的方法访问

时间:2018-07-12 13:30:05

标签: java reflection byte-buddy

我有一个类似以下示例的情况

public String test(Trail trail) {
  AnotherClass.access(trail);
  this.executeAnotherMethod(trail);
  futureCall(trail::end);
  return "emptyString";
}

我想使用字节伙伴来做类似的事情

public String test(Trail trail) {
  Trail clonedTrail = trail.clone("test");
  AnotherClass.access(clonedTrail);
  this.executeAnotherMethod(clonedTrail);
  futureCall(clonedTrail::end);
  return "emptyString";
}

我曾尝试Advice截获该呼叫,但这弄乱了对象引用。我一直在研究字节预算测试用例以及阅读ASM,但到目前为止还没有取得很大进展。

1 个答案:

答案 0 :(得分:0)

这可以通过覆盖参数的建议来完成。

@Advice.OnMethodEnter
static void enter(@Advice.Argument(readOnly = false) Trail trail) {
  trail = trail.clone("test");
}