目标探测对象

目标探测对象是应当应用探测的类和方法的规范。

目标对象是可选的。当没有指定目标时,将把探测应用于检测引擎所处理的所有类。

目标对象使您能够创建过滤器规则,以根据模式包含或从检测排除某些方法,这些方法与包、类和方法名称以及方法的特征符相配。这些模式可以包含通配符,其中“*”将与零或更多字符匹配。

如果目标的通配符模式与方法的包、类、名称和特征符匹配,type 属性将确定是检测(include)还是不检测(exclude)该方法。如果模式与方法的包、类、名称和特征符不匹配,缺省情况下,将检测该方法。

目标对象包含以下属性:
属性 描述
type 必需。type 属性确定是否将探测应用于目标方法。指定 include 将探测应用于与通配符模式匹配的类和方法,指定 exclude 排除它们。
package 可选。指定通配符模式以与类名称的包部分相配。例如:java.util* 将与 java.util 包及其子包中的每个类匹配。如果未指定,则缺省值为 *
className 可选。指定通配符模式以与类名相配。如果未指定,则缺省值为 *
method 可选。指定通配符模式以与方法名称相配。如果未指定,则缺省值为 *
signature 可选。指定通配符模式以与方法的特征符相配 - 即,指定表示方法实参和返回类型的字符串。这使用方法特征符的 Java 内部格式。例如:(Ljava/lang/Object;)D 是一个方法特征符,它将对象作为参数并返回双精度浮点数。可以使用该通配符模式来区分超载的方法。如果未指定,则缺省值为 *

注:

  • 一个探测可以具有包含连续目标规则的多个目标对象。要仅以您指定的方法为目标,请在您希望作为目标的方法的目标对象之后,添加指定 package=* className=* method=* signature=* type=exclude 的最终目标对象。
  • 还会对照类实现的任何接口的包和类名检查目标对象中指定的包和类名。例如,java.util.HashMap 实施接口 java.util.Map。如果探测以包 java.util、类名 Map 和方法名称 size 为目标,则将把探测应用于 java.util.HashMap.size(),以及所有其它实施 Map 接口的类的 size 方法。
  • 模式匹配不考虑继承关系:如果类 Derived 扩展类 Base,并且探测以 Base.run() 为目标,则将不会自动把探测应用于 Derived.run()
  • 如果目标对象中的包模式是单个句点字符(“.”),它表示全局、未命名的 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 元素参考

使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2004. All Rights Reserved.