第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

ByteBuddy:如何在轉(zhuǎn)換方法時(shí)跨進(jìn)入/退出添加局部變量

ByteBuddy:如何在轉(zhuǎn)換方法時(shí)跨進(jìn)入/退出添加局部變量

汪汪一只貓 2023-04-13 17:00:12
我正在嘗試在 Java 代理中使用ByteBuddy來(lái)檢測(cè)一些使用OpenTracing 的舊庫(kù)。這與OpenTracing Contrib Java Special Agent 項(xiàng)目有關(guān)。當(dāng)使用私有類(lèi)成員傳遞活動(dòng)范圍時(shí),我成功地完成了這項(xiàng)工作,但不幸的是,在某些情況下這是不可行的(錯(cuò)誤處理清除了成員字段)。所以我試圖使用 ByteBuddy 的能力來(lái)創(chuàng)建可以從@Advice.OnMethodEnter保留到@Advice.OnMethodExit的局部變量。這將允許我在方法進(jìn)入時(shí)創(chuàng)建 OpenTracing Span,并在方法退出時(shí)完成它。不過(guò),我不確定我的用例是否有效,因?yàn)槲沂褂玫氖寝D(zhuǎn)換器,它與@Advice.Local注釋的測(cè)試用例不完全匹配。我嘗試遵循此測(cè)試用例中使用的語(yǔ)法。但是,span 和 scope 變量在 exit 方法中始終為 null。我是 ByteBuddy 的新手,所以我確定我缺少一些基本的東西。public class SimpleFrameworkDispatcherAgentRule extends AgentRule {    @Override    public Iterable<? extends AgentBuilder> buildAgent(AgentBuilder agentBuilder) {        return Arrays.asList(agentBuilder                .type(named("org.simpleframework.http.core.Dispatcher"))                .transform((builder, typeDescription, classLoader, module) -> {                    return builder.visit(Advice.to(SimpleFrameworkDispatcherAgentRule.class)                            .on(named("dispatch")));                }));    }    @Advice.OnMethodEnter    public static void enter(final @Advice.Origin String origin,             final @FieldValue(value = "request", typing = Typing.DYNAMIC) Object request,             final @Advice.Local("span") Object span,             final @Advice.Local("scope") Object scope) {        if (isEnabled(origin)) {            SimpleFrameworkAgentIntercept.enter(request, span, scope);        }    }    @Advice.OnMethodExit    public static void exit(final @Advice.Origin String origin,             final @FieldValue(value = "response", typing = Typing.DYNAMIC) Object response,             final @Advice.Local("span") Object span,             final @Advice.Local("scope") Object scope) {        if (isEnabled(origin)) {            SimpleFrameworkAgentIntercept.exit(response, span, scope);        }    }}我對(duì) SimpleFrameworkAgentIntercept 進(jìn)入和退出方法進(jìn)行了檢測(cè),并確認(rèn)變量在進(jìn)入時(shí)已分配,但在退出時(shí)為空。
查看完整描述

1 回答

?
素胚勾勒不出你

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊

您必須分配變量,如果您在委托方法中執(zhí)行此操作則無(wú)濟(jì)于事。

Byte Buddy 使用建議代碼作為模板,其中特定方法中局部變量的任何賦值都被轉(zhuǎn)換為對(duì)內(nèi)聯(lián)字節(jié)代碼中檢測(cè)的局部變量的訪問(wèn)。

Java 沒(méi)有 C 或其他語(yǔ)言意義上的指針語(yǔ)義。如果您想分配spanscope必須在帶注釋的方法本身中這樣做。


查看完整回答
反對(duì) 回復(fù) 2023-04-13
  • 1 回答
  • 0 關(guān)注
  • 208 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)