【发布时间】:2021-09-16 07:59:12
【问题描述】:
我需要拦截 bytebuddy 的某些调用。但是,据我所知, .intercept() API 在被调用方编辑代码。我需要它被拦截调用方。我怎样才能做到这一点?我有一个所有调用者的列表,我可以对其进行编辑,但是是否有一个 api 可以以这种方式修改函数的主体?
【问题讨论】:
标签: java java-bytecode-asm byte-buddy
我需要拦截 bytebuddy 的某些调用。但是,据我所知, .intercept() API 在被调用方编辑代码。我需要它被拦截调用方。我怎样才能做到这一点?我有一个所有调用者的列表,我可以对其进行编辑,但是是否有一个 api 可以以这种方式修改函数的主体?
【问题讨论】:
标签: java java-bytecode-asm byte-buddy
您可以使用MemberSubstitution 替换方法调用。您可以通过DynamicType.Builder::visit 注册来应用此功能,您可以在其中决定需要调整哪些方法。您可以将调用重定向到您自己的基础架构并在适当的情况下调用实际代码。
也就是说,成员替换是有限的,被调用者替换要灵活得多。可能,使用StackWalker 来定位您在堆栈中的当前位置。
【讨论】: