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

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

無(wú)法使用 ByteBuddy Agent 轉(zhuǎn)換類

無(wú)法使用 ByteBuddy Agent 轉(zhuǎn)換類

富國(guó)滬深 2023-06-14 16:15:29
我實(shí)際上正在用 ByteBuddy API 編寫一個(gè) Java 代理,我需要在其中監(jiān)視一些方法。比方說(shuō)我需要記錄一個(gè)方法的執(zhí)行時(shí)間。這是我的代碼:    public class PerfAgents {     public static void premain(String agentArgs, Instrumentation inst){        LOGGER.info("[Agent] Loading classes ...");        Class classToMonitor = getClassFromArgs(agentArgs);        String methodToMonitor = getMethodFromArgs(agentArgs);        installAgent(inst, classToMonitor, methodToMonitor);    }     private static void installAgent(Instrumentation instrumentation, Class<?> classToMonitor, String methodToMonitor) {      new AgentBuilder.Default()           .type(is(classToMonitor))           .transform((builder, typeDescription, classLoader, module) ->                {                    LOGGER.info("Transforming {} for {}", method, classToMonitor.getSimpleName());                    return builder.method(named(methodToMonitor))                           .intercept(MethodDelegation.to(TimerInterceptor.class));           }).installOn(instrumentation);  }}這TimerInterceptor類似于LoggerInterceptor我在 ByteBuddy 教程中找到的,我在其中使用了@SuperCall注釋。問(wèn)題不是我不確定 ByteBuddy 是否將轉(zhuǎn)換應(yīng)用于提供的類和方法。我可以看到代理正在我的應(yīng)用程序中加載,但是當(dāng)我執(zhí)行我的監(jiān)控方法時(shí),沒(méi)有任何反應(yīng)。這是我的 TimerInterceptor 類:static class TimerInterceptor {    private static Logger LOGGER = LoggerFactory.getLogger(LogInterceptor.class);    public static Object log(@SuperCall Callable<Object> callable) throws Exception {        LocalTime start = LocalTime.now();        Object called = callable.call();        LocalTime end = LocalTime.now();        Duration between = Duration.between(start, end);        LOGGER.info("Execution time : {} ms", between.toMillis());        return called;    }}任何幫助,將不勝感激。
查看完整描述

1 回答

?
慕標(biāo)琳琳

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

您沒(méi)有將 Byte Buddy 配置為重新轉(zhuǎn)換已加載的類。.with(RetransformationStrategy.RETRANSFORM)您可以通過(guò)在代理構(gòu)建器 DSL 中進(jìn)行設(shè)置來(lái)實(shí)現(xiàn)。

如果您可以避免重新轉(zhuǎn)換,即如果您只檢測(cè)在執(zhí)行代理時(shí)未加載的應(yīng)用程序類,則可以跳過(guò)此步驟。相反,使用基于字符串的匹配器并且不加載該類。如果需要更豐富的描述,也可以使用aTypePool.Default讓字節(jié)好友在不加載類的情況下解析類文件。

要查看 Byte Buddy 在做什么,您可以注冊(cè)一個(gè)Listener.StreamWriting.toSystemOut()所有發(fā)現(xiàn)的類都打印到控制臺(tái)的位置,包括任何潛在的錯(cuò)誤。


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

添加回答

舉報(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)