拦截调用方的方法调用

时间:2021-07-05 14:25:28

标签: java java-bytecode-asm byte-buddy

我需要用 bytebuddy 拦截某些调用。但是,据我所知,.intercept() API 在被调用方编辑代码。我需要它被来电方拦截。我怎样才能做到这一点?我有一个所有调用者的列表,我可以编辑它们,但是有没有以这种方式修改函数体的 api?

1 个答案:

答案 0 :(得分:0)

您可以使用 MemberSubstitution 替换方法调用。您可以通过 DynamicType.Builder::visit 注册来应用此功能,您可以在其中决定需要调整哪些方法。您可以将调用重定向到您自己的基础架构,并在适当时调用实际代码。

也就是说,成员替换是有限的,被调用者替换要灵活得多。可能,使用 StackWalker 来定位您在堆栈中的当前位置。