這個範例示範 staticField 資料項目和 staticInitializer 探測片段的用法。
在範例中,探測會追蹤類別的實例何時建立。如果在該類別的前一個實例建立之後,超過一秒才建立下一個實例,探測就會撰寫一則日誌訊息。
下面就是這個探測所做的事:
- 探測利用 static 欄位定義,在每一個被探測的類別中建立 Date 類型的 static 欄位。靜態欄位是藉由呼叫 new Date(); 而起始設定。
- 在 staticInitializer 片段中,只要載入被探測之類別的 Date 實例,探測就會把它設為 "time zero"(1970 年一月)。
- 在 entry 片段中,探測會檢查上次何時更新,如果更新是在 1 秒以前執行,則發出報告。(由於目標規則的緣故,entry 片段只在建構子中執行。)
- 最後,探測會把 Date 實例的值改為 "now"。
探測會使用 static 欄位定義在每一個被探測的類別中建立新的 static 欄位。相較之下,利用類別範圍的片段來宣告 Date 欄位時,只會在產生的類別(保存探測片段)中產生單一 Date 實例,而不論探測套用至多少個類別。如果您要追蹤在建立任何被探測類別的實例之間(而不是建立每一個被探測的類別實例之間),延遲了多久時間,就可以這麼做。
Probekit 編輯器使用下列項目來定義此探測:
- static 欄位的完整 Java 類型(在樹狀窗格中用滑鼠右鍵按一下 探測,
再按一下,輸入這個值):
java.util.Date
- 目標(若要輸入這些值,請在樹狀結構畫面中選取目標,再按一下編輯):
- 目標類型:include
- 套件:com.sample*(這裡使用實際的套件名稱。)
- 類別:*
- 方法:<init>
- 方法簽章:*
- 目標(若要輸入這些值,請在編輯畫面中按一下新增,
再按一下編輯):
- 目標類型:exclude
- 套件:*
- 類別:*
- 方法:*
- 方法簽章:*
- 片段(在樹狀結構畫面中選取片段來輸入這些值):