【发布时间】:2019-01-06 01:51:18
【问题描述】:
我正在解决一个学校作业的问题。假设我有一个课程如下
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 呵呵
现在我正在创建一个 java 代理,它将拦截对 foo 的所有调用,我想在 bar 中创建一个新方法,如下所示,并将所有对 foo 的调用替换为只调用 bar(int i) 然后返回。
public String bar(int i) {
printvalue(i);
return "bar";
}
所以 main 的输出应该变成
10 酒吧
我怎样才能做到这一点。我正在寻找使用 bytebuddy 或 javassist 来做到这一点。任何帮助表示赞赏
【问题讨论】:
-
您可以在 java 中检查面向方面的编程。编写一个装饰器来拦截调用。
标签: javassist byte-buddy