是否有办法检索调用者;“对象”;在使用ByteBuddy的Java代理中?

是否有办法检索调用者;“对象”;在使用ByteBuddy的Java代理中?,java,byte-buddy,javaagents,Java,Byte Buddy,Javaagents,要检索调用方的类,我们可以使用StackWalker: @Advice.OnMethodEnter 静态无效输入(@Advice.This Object thiz, @建议.产地来源法, @Advice.AllArguments对象…args){ var walker=StackWalker.getInstance(保留类引用); var callerClass=walker.getCallerClass(); ... } 但是,如果调用方对象还没有被垃圾收集,有没有一种方法可以获取对它的引用

要检索调用方的类,我们可以使用
StackWalker

@Advice.OnMethodEnter
静态无效输入(@Advice.This Object thiz,
@建议.产地来源法,
@Advice.AllArguments对象…args){
var walker=StackWalker.getInstance(保留类引用);
var callerClass=walker.getCallerClass();
...
}
但是,如果调用方对象还没有被垃圾收集,有没有一种方法可以获取对它的引用呢


我特别感兴趣的是调用方对象的类型。

不,这是不可能的,无论是在Java代理中,还是在没有它的情况下。获取引用的唯一方法是检测方法的调用方以提供其自己的实例引用


但是,从概念上讲,我不建议使用此解决方案,因为它非常容易受到重构的影响,并且如果发生反射、方法句柄或静态方法调用,也会产生未定义的行为。

不,这是不可能的,无论是在Java代理中还是在没有它的情况下。获取引用的唯一方法是检测方法的调用方以提供其自己的实例引用

但是,从概念上讲,我不建议使用此解决方案,因为它非常容易重构,并且如果发生反射、方法句柄或静态方法调用,也会产生未定义的行为