在调用方拦截方法调用

Intercepting method calls on the caller side

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

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

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