この例では、staticField データ項目および StaticInitializer プローブ・フラグメントの使用方法を示します。
この例のプローブは、クラスのインスタンス作成のタイミングを追跡します。あるインスタンスが、そのクラスの前のインスタンスが作成されてから 1 秒を過ぎた後に作成されると、プローブはログ・メッセージを書き込みます。
このプローブは staticField を使用して、プローブ済みの各クラスに新しい静的フィールドを作成します。 これと比較して、fragmentAtClassScope を使用して Date フィールドを宣言すると、プローブが適用されたクラスがいくつあっても、プローブ・フラグメントを保持する生成済みクラスに、Date のインスタンスが 1 つ現れます。 各プローブ済みクラスのインスタンス作成間の遅延を追跡するのではなく、任意のプローブ済みクラスのインスタンス作成間の遅延を追跡したい場合に、この方法を実行できます。
このコード例を使用するには、ターゲット・オブジェクトの 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>