我正在解决学校作业的问题。让我们说我有一个如下的课程
class test {
public String foo(int i) {
printvalue(i);
return "foo";
}
public void printvalue(int i) {
System.out.println(i);
}
}
class Solution {
public static void main(String[] args) {
System.out.println(new test().foo(10));
}
}
输出是
10 foo
现在,我正在创建一个Java代理,它将拦截对foo的所有调用,我想按如下所示在bar中创建一个新方法,并将所有对foo的调用替换为只调用bar(int i),然后返回。
public String bar(int i) {
printvalue(i);
return "bar";
}
因此main的输出应更改为
10 酒吧
如何实现这一目标。我一直在寻找使用bytebuddy或javassist来做到这一点。感谢您的帮助
答案 0 :(得分:0)
使用MemberSubstitution
可以在字节伙伴中实现。在DSL中,您可以编写:
MemberSubstitution.relaxed()
.method(ElementMatchers.named("foo"))
.replaceWith(ElementMatchers.named("bar"))
您可以使用实现代理的AgentBuilder
注册此访客。
您可以使用构建器DSL实现自定义方法,在其中您可以将MethodCall
和FixedValue
的组合提供实现。