首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有办法使用ByteBuddy检索Java agent中的调用者“对象”?

有没有办法使用ByteBuddy检索Java agent中的调用者“对象”?
EN

Stack Overflow用户
提问于 2019-06-02 20:29:52
回答 1查看 112关注 0票数 1

为了检索调用者的类,我们可以使用StackWalker

代码语言:javascript
运行
复制
@Advice.OnMethodEnter
static void enter(@Advice.This Object thiz, 
                  @Advice.Origin Method method, 
                  @Advice.AllArguments Object... args) {
    var walker =  StackWalker.getInstance(RETAIN_CLASS_REFERENCE);
    var callerClass = walker.getCallerClass();
    ...
}

但是,如果caller对象还没有被垃圾回收,那么有没有办法获得它的引用呢?

特别是,我对caller对象的identity hash code感兴趣。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-03 14:25:39

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

然而,从概念上讲,我不建议使用这种解决方案,因为它很容易受到重构的影响,而且如果发生反射、方法处理或静态方法调用,也会产生未定义的行为。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56415024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档