2016-04-06 93 views
1

java儀器中變壓器的主要用途是什麼。我知道他們將被添加到儀器實例中。另外,在倍美力的方法,什麼參數在public static void premain(String agentArgs, Instrumentation inst);Java儀器中的變壓器

回答

1

變形金剛(java.lang.instrument.ClassFileTransformer)分配給agentArgs使用它們加載到Java虛擬機之前的字節代碼級轉換類文件。該特性可用於修改字節級別的方法(實際上,您獲得一個字節數組)或使用第三方庫(如Javassist或ASM),其中Javassist位於較高的修改層上(您可以提供獲取編譯的源代碼在運行期間)。 ASM使用字節碼關鍵字(即invokevirtual)。

在加載時間期間修改類及其條目在流行的框架(如AspectJ)中用於提供加載方面的能力(即所謂的「加載時間編織」)。


premain(...)方法的agentArgs參數是包含參數,其中給在啓動時代理String。這是一個單獨的String,它應該由代理本身進行分析。

你可以像這樣的代理提供一個:

$ java -javaagent:${jarfile}=${agentArgs} 

你作爲${agentArgs}輸入的值將是agentArgs參數的值。

如果它只包含一個參數,爲什麼叫做args?只有天知道。

+0

謝謝你的回答。你能告訴我什麼agentArgs會包含。我的意思是它的字符串值 – FAZ

+0

@FAZ我更新了我的答案以清楚說明。您在$ {agentArgs}處給出的值將是參數'agentArgs'的值。 –