練習 1.5:使用執行時期程式庫來執行更複雜的探測邏輯

開始之前,建議您先閱讀練習 1.4:建立更進階的探測

透過 Probekit,您可以輕易地撰寫包含簡易 Java 程式碼片段的簡式探測。在「練習 1.4」中,您已經瞭解您可以針對基本探測來進行更複雜的動作。有時候, 您需要進行更複雜的動作,而這些是簡式探測無法提供的。在此情況下,您不必試圖將所有要執行的邏輯放入探測片段中, 您可以為探測建立一個「執行時期支援程式庫」。這樣,您就可以讓探測片段呼叫這個程式庫, 而程式庫就是動作真正發生的地方。

如果您決定使用執行時期程式庫,有時您需要使用反射來呼叫其方法。這是因為產生的探測類別是由 bootstrap 類別載入器所載入, 而且無法直接存取 system 類別載入器所載入的類別。

以下是「進入」片段的範例,它會呼叫執行時期程式庫中的 entryHandler 方法:

假設您要呼叫包含靜態方法 entryHandlercom.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 物件,而且只起始設定它一次。

請檢視摘要中的資料來完成您的指導教學。

讀者意見
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.