この例では、FragmentAtClassScope プローブ・フラグメントの使用法を示します。
この例のプローブは、「com.sample*」のワイルドカード・パターンと一致する、パッケージ内のすべてのクラスに対してこれまでに作成されたインスタンスの数を数えて、インスタンスが 100 個作成されるたびに報告します。
「クラス・スコープでのフラグメント (fragment at class scope)」では、entry フラグメントをコンパイルして挿入したクラス内で、int 型の静的フィールドとして現れるカウンターを宣言します。 このフラグメントは、プローブがロードされたことを報告する fragment クラスのための静的イニシャライザーも宣言します。fragmentAtClassScope セクション内の項目は、プローブが適用されたクラスではなく、生成されたプローブ・クラス内に作成されることに注意してください。 プローブが適用されたクラス内に静的フィールドまたは静的イニシャライザー・ロジックを挿入するには、staticField および staticInitializer オブジェクトを使用してください。
このコード例を使用するには、ターゲット・オブジェクトの package="com.sample*" を、実際のパッケージ名を参照するように変更してください。
XML で文字 & および < を使用するには、例に示すように文字エンティティー & および < を指定する必要があります。
<?xml version="1.0" encoding="ASCII"?> <probekit> <probe> <fragmentAtClassScope> static public int entry_counter = 0; static int counter = 0; static { System.out.println("[fragmentAtClassScope sample probe has loaded.]"); } </fragmentAtClassScope> <target type="include" package="com.sample*" method="<init>" /> <target type="exclude" package="*" /> <fragment type="entry"> <code> ++counter; if (counter % 100 == 0) System.out.println("[" + counter + " instances of classes in com.sample package so far]"); </code> </fragment> </probe> </probekit>
親トピック: Probekit の例