開始之前,建議您先閱讀練習 1.4:建立更進階的探測。
透過 Probekit,您可以輕易地撰寫包含簡易 Java 程式碼片段的簡式探測。在「練習 1.4」中,您已經瞭解您可以針對基本探測來進行更複雜的動作。有時候, 您需要進行更複雜的動作,而這些是簡式探測無法提供的。在此情況下,您不必試圖將所有要執行的邏輯放入探測片段中, 您可以為探測建立一個「執行時期支援程式庫」。這樣,您就可以讓探測片段呼叫這個程式庫, 而程式庫就是動作真正發生的地方。
如果您決定使用執行時期程式庫,有時您需要使用反射來呼叫其方法。這是因為產生的探測類別是由 bootstrap 類別載入器所載入, 而且無法直接存取 system 類別載入器所載入的類別。
以下是「進入」片段的範例,它會呼叫執行時期程式庫中的 entryHandler 方法:
假設您要呼叫包含靜態方法 entryHandler 的 com.sample.ProbeSupport 類別。假設 entryHandler 不需要引數。 同時,假設類別可以由系統類別載入器來載入。
try { String className = "com.sample.ProbeSupport"; ClassLoader sysLoader = ClassLoader.getSystemClassLoader(); Class cls = Class.forName(className, true, sysLoader); java.lang.reflect.Method mth = cls.getMethod("entryHandler", null); mth.invoke(null, null); } catch (Throwable t) { System.out.println("試圖反射時發生探測錯誤:"); t.printStackTrace(); }
為了節省每次呼叫的時間,您可以使用類別範圍的片段來宣告一個靜態 java.lang.reflect.Method 物件,而且只起始設定它一次。
請檢視摘要中的資料來完成您的指導教學。