クラス有効範囲プローブでのフラグメントの例

この例では、プローブ内のクラス有効範囲でのフラグメントの使用法を示します。

この例では、プローブが、com.sample* ワイルドカード・パターンと一致するパッケージ内の すべてのクラスに関してそれまでに作成されたインスタンスの数をカウントし、インスタンスが 100 個作成されるごとに報告します。

クラス有効範囲でのフラグメントは、entry フラグメントをコンパイルして組み込むクラスにおいて 、int 型の静的フィールドとして表示されるカウンターを宣言します。 フラグメントは、プローブがロードされたことを報告するために、fragment クラスの静的イニシャライザーも宣言します。 クラス有効範囲でのフラグメント内の項目はビルドされて、プローブが適用されるクラスではなく、 生成済みのプローブ・クラスに組み込まれることに注意してください。 プローブを適用するクラスに静的フィールドまたは静的イニシャライザー・ロジックを挿入するには 、staticInitializer 型のプローブ・フラグメントを使用するか、あるいは静的フィールドを定義します。

このプローブは、Probekit エディターで以下の項目によって定義されます。
  • クラス有効範囲でのフラグメントの Java コード (ツリー・ペインで 「プローブ」を選択して、以下の値を入力します):

    static public int entry_counter = 0;
    static int counter = 0;
    static { System.out.println("[fragmentAtClassScope sample probe has loaded.]"); }

  • ターゲット (ツリー・ペインで「ターゲット」を選択し、 「編集」をクリックして、以下の値を入力します):
    • ターゲット型: include
    • パッケージ名パターン: com.sample* (ここでは 実際のパッケージ名を使用します)
    • メソッド名パターン: <init>
  • ターゲット (編集ペインで「追加」をクリックし、 「編集」をクリックして、以下の値を入力します):
    • ターゲット型: exclude
    • パッケージ名パターン: *
  • フラグメント (ツリー・ペインで「フラグメント」を選択して、 以下の値を入力します):
    • フラグメント型: entry
    • Java コード:

      ++counter;
      if (counter % 100 == 0)
        System.out.println("[" + counter + " instances of classes in com.sample package so far]");

フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.