用方法将一个字段替换为另一个字段

时间:2018-07-04 03:24:29

标签: java byte-buddy

我正在尝试在方法主体中将字段引用动态替换为另一个字段引用。 bytebuddy有可能吗?

我要转换的类是这样的:

public class TestReplace {
    @replace
    int a = 1;
    int b = 2;

    public int printA() {
        return a;
    }

    public int printB() {
        return b;
    }
}

转换包括在访问它们的方法中替换标有@replace的变量。替换将由我要插入的变量完成。

已转换的类应如下所示:

public class TestReplace {
    @replace
    int a = 1;
    int ___a = a * 10; // var inserted
    int b = 2;

    public int printA() {
        return ___a;
    }

    public int printB() {
        return b;
    }
}

我是这个学科的新手,非常感谢您能为我提供的帮助。

预先感谢

1 个答案:

答案 0 :(得分:0)

是的,可以使用MemberSubstitution

MemberSubstitution.relaxed()
  .field(ElementMatchers.named("a"))
  .onRead()
  .doReplaceWith(otherField)

例如,您可以从使用AgentBuilder API定义的Java代理中应用此转换。您可能还需要从该代理定义替代字段。您可以使用FieldDescription.Latent来引用此字段。