gpt4 book ai didi

java - ByteBuddy静态方法拦截@Origin方法

转载 作者:行者123 更新时间:2023-11-30 06:54:43 34 4
gpt4 key购买 nike

我正确拦截了这个静态方法

 TypeDescription commandBase = TypePool.Default.ofClassPath()
.describe("poo.laboratoire1.Q2.Application").resolve();
new ByteBuddy()
.redefine(commandBase, ClassFileLocator.ForClassLoader.ofClassPath())
.method(named("obtenirTrame"))
.intercept(MethodDelegation.to(Mock.class))
.make()
.load(ClassLoader.getSystemClassLoader(),
ClassReloadingStrategy.Default.INJECTION);

但是当我用这个拦截器调用原始方法时:

 public static boolean[] obtenirTrame(int i, @Origin Method origin){
...
origin.invoke(null, i);
...
}

我在“origin”中收到新的拦截器方法而不是原始方法,导致无限递归。我错过了什么还是这是一个错误?

最佳答案

通过调用 @Origin 方法,您将调用当前正在执行的同一方法。 Byte Buddy 通过更改类来检测方法 foo:

class Bar {
void foo() { /* some code */ }
}

进入

class Bar {
void foo() { Interceptor.call( ... ); }
void foo$original() { /* some code */ }
}

如果您想获取原始版本,可以使用@SuperMethod注释。不过,更建议使用 @SuperCall@Morph 注释。

关于java - ByteBuddy静态方法拦截@Origin方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42076599/

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