在方法中用另一个字段替换一个字段
Replace one field with another in a method
我正在尝试用另一个字段引用动态替换方法主体中的一个字段引用。 bytebuddy 可以吗?
我喜欢改造的class是这样的:
public class TestReplace {
@replace
int a = 1;
int b = 2;
public int printA() {
return a;
}
public int printB() {
return b;
}
}
转换在于替换访问它们的方法中标有@replace 的变量。替换将由我将插入的变量完成。
已经转换的class应该是这样的:
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;
}
}
我是这个主题的新手,如果您能给我任何帮助,我将不胜感激。
提前致谢
是的,这可以使用 MemberSubstitution
:
MemberSubstitution.relaxed()
.field(ElementMatchers.named("a"))
.onRead()
.doReplaceWith(otherField)
例如,您可以从使用 AgentBuilder
API 定义的 Java 代理应用此转换。您可能还需要定义此代理的替代字段。您可以使用 FieldDescription.Latent
.
引用此字段
我正在尝试用另一个字段引用动态替换方法主体中的一个字段引用。 bytebuddy 可以吗?
我喜欢改造的class是这样的:
public class TestReplace {
@replace
int a = 1;
int b = 2;
public int printA() {
return a;
}
public int printB() {
return b;
}
}
转换在于替换访问它们的方法中标有@replace 的变量。替换将由我将插入的变量完成。
已经转换的class应该是这样的:
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;
}
}
我是这个主题的新手,如果您能给我任何帮助,我将不胜感激。
提前致谢
是的,这可以使用 MemberSubstitution
:
MemberSubstitution.relaxed()
.field(ElementMatchers.named("a"))
.onRead()
.doReplaceWith(otherField)
例如,您可以从使用 AgentBuilder
API 定义的 Java 代理应用此转换。您可能还需要定义此代理的替代字段。您可以使用 FieldDescription.Latent
.