Target 探針物件

Target 探針物件是探針類別和方法要套用的規格。

Target 物件是選用性的物件。 如果沒有指定任何 Target,探針就會套用到所有設備引擎所處理的類別中。

Target 物件可讓您建立過濾規則,根據符合套件、類別和方法名稱,加上方法簽章的型樣,在設備加入或排除方法。 這些型樣可以包含萬用字元,其中 "*" 可以比對零個或更多個字元。

如果 Target 的萬用字元型樣,與方法的套件、類別、名稱和簽章相符, 則 type 屬性便可以決定要操作 (include) 還是不要操作 (exclude) 該方法。 如果型樣與方法的套件、類別、名稱和簽章不符,則預設情況是會操作該方法。

Target 物件的內容如下:
內容 說明
type 必要的項目。 type 屬性可以決定是否要將探針套用到目標方法。 請指定 include,把探針套用到符合萬用字元型樣的類別和方法,而指定 exclude 來排除它們。
package 選用性的項目。請指定一個萬用字元型樣,尋找符合類別名稱套件部份的項目。 例如:java.util* 會尋找 java.util 套件及其子套件中的每一個類別。 如果沒有指定,則預設值為 *
className 選用性的項目。請指定一個萬用字元型樣,尋找符合類別名稱的項目。 如果沒有指定,則預設值為 *
method 選用性的項目。請指定一個萬用字元型樣,尋找符合方法名稱的項目。 如果沒有指定,則預設值為 *
signature 選用性的項目。請指定一個萬用字元型樣,尋找符合方法簽章的項目 - 亦即,代表方法引數和傳回值的字串。 這是方法簽章的 Java 內部格式。 例如:(Ljava/lang/Object;)D 這個簽章,是一個把 Object 當作參數,並且傳回 double 之方法的簽章。 您可以利用這個萬用字元型樣,找出超載的方法。 如果沒有指定,則預設值為 *

附註:

  • 探針可以有多個含連續目標規則的 Target 物件。 如果只要針對您所指定的方法為目標,請加入一個最終的 Target 物件, 在 Target 物件後面,為您要針對的方法指定 package=* className=* method=* signature=* type=exclude
  • 在 Target 物件所指定的套件和類別名稱,也會核對類別實作之任何介面的套件和類別名稱,而加以檢查。 例如,java.util.HashMap 會實作 java.util.Map 介面。 如果探針以套件 java.util、類別名稱 Map 和方法名稱 size 為目標, 則探針會套用到 java.util.HashMap.size(),以及套用到其他實作 Map 介面之任何類別的 size 方法。
  • 尋找相符型樣時,並不會考慮繼承關係: 如果類別 Derived 延伸類別 Base,而探針以 Base.run() 為目標, 則該探針就不會自動套用到 Derived.run()
  • 如果 Target 物件中的套件型樣,是一個單點字元 ("."),則它代表未命名的廣域 Java 套件。 這樣一來,您就可以明確的以廣域套件中的類別為目標。 例如:
    <target type="include" package="." class="SomeClass" method="*" />
    <target type="exclude" package="*" class="*" method="*" />
    這兩個目標規則,會使探針以廣域套件中的 SomeClass 類別為目標,而將其他類別排除在外。 根據這兩個規則,其他套件中名叫 SomeClass 的類別,都將排除在外。
  • Callsite 探針會根據被呼叫之方法的套件、類別、名稱和簽章,來尋找符合的目標型樣和規則。 尋找相符的項目,是核對被呼叫的方法來進行,因為它是在編譯時間才能得知; 換句話說,它是核對一般所知道的類別和方法名稱, 而不是核對因為繼承和虛擬功能而被呼叫的實際方法。 如果呼叫是透過介面參照而進行,則介面名稱必須一樣。
範例
<target
  type="include"
  package="com.example"
  className="*Proxy"
  method="Get*"
/>

內含於
探針物件

母主題: Probekit 參照

Copyright IBM Corporation and others 2000, 2004.