gpt4 book ai didi

java - 如何使用 ByteBuddy 拦截方法,就像在 CGLIB 中使用 MethodInterceptor 来调用 MethodProxy.invokeSuper(...)

转载 作者:太空宇宙 更新时间:2023-11-04 09:20:36 26 4
gpt4 key购买 nike

我想用ByteBuddy拦截一些方法。当我使用 InvocableHandlerAdapter.of(invocalHandler) 时,我无法调用 super 方法。持有对象实例不适合我的情况。我想要的与 CGLIB 中的完全相同,如下所示。

(MethodInterceptor)(obj, method, args, proxy)->{
// to do some work
Object o = proxy.invokeSuper(obj,args);
// to do some work
return o;
}

如何在ByteBuddy中实现这样的拦截方法?

我尝试了 MethodCall 类型的 Implementation 但它没有解决我的问题。因为在这种情况下我无法管理 MethodCall.invokeSuper()

.intercept(MethodCall
.run(() -> System.out.println("Before"))
.andThen(MethodCall.invokeSuper())
.andThen(MethodCall
.run((() -> System.out.println("After")))))

最佳答案

看看 MethodDelegation,例如:

public class MyDelegation {
@RuntimeType
public static Object intercept(@SuperCall Callable<?> superCall) throws Exception {
// to do some work
Object o = superCall.call();
// to do some work
return o;
}
}

然后使用:

.intercept(MethodDelegation.to(MyDelegation.class))

您可以检查 MethodDelegation 的 javadoc,以获取可用于注入(inject)上下文信息的更多注释。

关于java - 如何使用 ByteBuddy 拦截方法,就像在 CGLIB 中使用 MethodInterceptor 来调用 MethodProxy.invokeSuper(...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58372496/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com