staticField および staticInitializer の例

この例では、staticField データ項目および StaticInitializer プローブ・フラグメントの使用方法を示します。

この例のプローブは、クラスのインスタンス作成のタイミングを追跡します。あるインスタンスが、そのクラスの前のインスタンスが作成されてから 1 秒を過ぎた後に作成されると、プローブはログ・メッセージを書き込みます。

このプローブは、以下のことを行います。
  1. staticField データ項目を使用して、プローブは、プローブ済みの各クラスに Date 型の静的フィールドを作成します。 静的フィールドは、new Date(); を呼び出すことによって初期化されます。
  2. プローブは、staticInitializer フラグメントで、ロードされたときにプローブ済みクラスの Date インスタンスを「time zero」(1970 年 1 月) に設定します。
  3. プローブは、entry フラグメント (ターゲットの規則により、entry フラグメントはコンストラクターでのみ実行されます) で、前回の更新がいつ実行されたかを調べ、その更新が 1 秒より前に実行されたかどうかの報告を出します。
  4. 最後に、プローブは Date インスタンスの値を「now」に更新します。

このプローブは staticField を使用して、プローブ済みの各クラスに新しい静的フィールドを作成します。 これと比較して、fragmentAtClassScope を使用して Date フィールドを宣言すると、プローブが適用されたクラスがいくつあっても、プローブ・フラグメントを保持する生成済みクラスに、Date のインスタンスが 1 つ現れます。 各プローブ済みクラスのインスタンス作成間の遅延を追跡するのではなく、任意のプローブ済みクラスのインスタンス作成間の遅延を追跡したい場合に、この方法を実行できます。

このコード例を使用するには、ターゲット・オブジェクトの package="com.sample*" を、実際のパッケージ名を参照するように変更してください。

XML で文字 & および < を使用するには、例に示すように文字エンティティー &amp; および &lt; を指定する必要があります。

<?xml version="1.0" encoding="ASCII"?>
<probekit>
  <probe>
    <target type="include" package="com.sample*" method="&lt;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 &amp;&amp; prev + 1000 &lt; 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 の例

関連参照
StaticField プローブ・オブジェクト
staticInitializer プローブ・フラグメント

Copyright IBM Corporation and others 2000, 2004.