この例では、staticField データ項目および staticInitializer プローブ・フラグメントの使用方法を示します。
この例のプローブは、クラスのインスタンスがいつ作成されるのかを追跡します。インスタンスが作成された後、同じクラスのインスタンスが次に作成されるまでに 1 秒より多く経過していた場合、プローブはログ・メッセージを書き込みます。
このプローブは、以下のことを行います。
- プローブは、static フィールド定義を使用して、
プローブ済みの各クラスに Date 型の静的フィールドを作成します。静的フィールドは、new Date(); を呼び出すことによって初期化されます。
- プローブは、staticInitializer フラグメントで、ロードされたときにプローブ済みクラスの Date インスタンスを「time zero」(1970 年 1 月) に設定します。
- プローブは、entry フラグメントで、前回の更新がいつ実行されたかを調べ、その更新が実行された時点から 1 秒より多く経過していた場合、報告を出します。 (ターゲットの規則により、entry フラグメントはコンストラクターでのみ実行されます。)
- 最後に、プローブは Date インスタンスの値を「now」に更新します。
このプローブは、static フィールド定義を使用して、プローブ済みの各クラスに新しい静的フィールドを作成します。これと比較して、クラス有効範囲でのフラグメントを使用して Date フィールドを宣言すると、
プローブが適用されたクラスがいくつあっても、プローブ・フラグメントを保持する生成済みクラスに、Date のインスタンスが
1 つ現れます。各プローブ済みクラスのインスタンス作成間の遅延を追跡するのではなく、任意のプローブ済みクラスのインスタンス作成間の遅延を追跡したい場合に、この方法を実行できます。
このプローブは、Probekit エディター内の以下のエントリーによって定義されています。
- static フィールドの完全修飾 Java の型 (ツリー・ペインの「プローブ (Probe)」をクリックして、次に「とクリックしてこの値を入力します):
java.util.Date
- ターゲット (これらの値を入力するには、ツリー・ペインの「ターゲット」を選択して、
次に「編集」をクリックします):
- ターゲット型: include
- パッケージ: com.sample* (ここでは実際のパッケージ名を使用します。)
- クラス: *
- メソッド: <init>
- メソッド・シグニチャー: *
- ターゲット (これらの値を入力するには、「追加」をクリックし、次に編集ペインの「編集」をクリックします):
- ターゲット型: exclude
- パッケージ: *
- クラス: *
- メソッド: *
- メソッド・シグニチャー: *
- フラグメント (これらの値を入力するには、
ツリー・ペインの「フラグメント (Fragment)」を選択します)。