簡體   English   中英

是否可以使用ByteBuddy在Java代理中檢索調用方“對象”?

[英]Is there a way to retrieve the caller “object” in a Java agent using ByteBuddy?

要檢索調用者的類,我們可以使用StackWalker

@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();
    ...
}

但是如果還沒有被垃圾回收,有沒有辦法獲得對調用者對象的引用?

我特別對調用者對象的身份哈希代碼感興趣。

不,在Java代理中或沒有它,這都是不可能的。 獲取引用的唯一方法是通過對方法的調用程序進行檢測以提供其自己的實例引用。

從概念上講,我不建議您使用此解決方案,因為它非常容易重構,並且如果發生反射,方法處理或從靜態方法進行調用,也會產生未定義的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM