這個範例示範 staticField 資料項目和 StaticInitializer 探針片段的使用。
在此範例中,探針不斷地追蹤類別實例的建立時間。如果在該類別的前一個實例之後超過一秒才建立另一個實例,則探針會寫入日誌訊息。
這個探針使用 staticField 在每一個探測類別中建立新的靜態欄位。經由比較,利用 fragmentAtClassScope 來宣告 Date 欄位會使得單一的 Date 實例出現在存放探針片段的產生類別中,不管探針套用到幾個類別中。如果您要追蹤任何探測類別實例建立之間的時間延遲,而不是追蹤各個探測類別實例建立之間的延遲,您可以執行此動作。
如果要使用這個程式碼範例,請變更目標物件中的 package="com.sample*" 以參照實際的套件名稱。
請注意,如果要在 XML 中使用 & 和 < 字元,您必須指定字元實體 & 和 <,如範例所示。
<?xml version="1.0" encoding="ASCII"?> <probekit> <probe> <target type="include" package="com.sample*" method="<init>" /> <target type="exclude" package="*" /> <staticField type="java.util.Date"/> <fragment type="entry"> <data name="lastInstanceDate" type="staticField"/> <data name="clname"/> <code> java.util.Date d = new java.util.Date(); long now = d.getTime(); long prev = lastInstanceDate.getTime(); if (prev != 0 && prev + 1000 < now) { System.out.println("[" + clname + " instance after > 1 second]"); } lastInstanceDate.setTime(now); </code> </fragment> <fragment type="staticInitializer"> <data name="lastInstanceDate" type="staticField"/> <data name="clname"/> <code> lastInstanceDate.setTime(0); System.out.println("[" + clname + " class loaded]"); </code> </fragment> </probe> </probekit>
上層主題: Probekit 範例