Определение целевых объектов датчика

Определение датчика target задает классы и методы, в которых следует установить датчик.

Спецификацию целевых объектов указывать не обязательно. Если целевые объекты не заданы, то механизм встраивания устанавливает датчик во все обрабатываемые классы.

С помощью спецификации целевых объектов можно задать фильтры, работающие на основе сравнения с заданным шаблоном группы, класса, имени и сигнатуры метода. Шаблоны могут содержать символы подстановки, где "*" соответствует любой строке.

Если группа, класс, имя и сигнатура метода соответствуют шаблону, заданному в целевом объекте, то в зависимости от значения параметра type в него встраивается (include) или не встраивается (exclude) датчик. В противном случае, по умолчанию датчик встраивается в метод.

Целевой объект обладает следующими свойствами:
Свойство Описание
type Обязательный атрибут. type определяет, будет ли встроен датчик в целевой метод. Значение include означает, что датчик встраивается в классы и методы, соответствующие шаблону, а значение exclude - что не встраивается.
package Необязательный атрибут. Задает шаблон, с которым сравнивается групповое имя класса. Например: Шаблону java.util* соответствуют все классы группы java.util и ее подгрупп. Если этот параметр не задан, то используется значение по умолчанию *.
className Необязательный атрибут. Задает шаблон, с которым сравнивается имя класса. Если этот параметр не задан, то используется значение по умолчанию *.
method Необязательный атрибут. Задает шаблон, с которым сравнивается имя метода. Если этот параметр не задан, то используется значение по умолчанию *.
signature Необязательный атрибут. Задает шаблон, с которым сравнивается сигнатура метода. Сигнатурой называется строка, задающая аргументы метода и тип возвращаемого значения. Сигнатуры методов соответствуют внутреннему формату Java. Например, (Ljava/lang/Object;)D - это сигнатура метода, который принимает объект Object в качестве параметра и возвращает значение типа double. Такой шаблон можно использовать для различения перегруженных методов. Если этот параметр не задан, то используется значение по умолчанию *.

Примечания:

  • Датчик может иметь несколько спецификаций целевых объектов, содержащих правила, применяемые последовательно. Для того чтобы установить датчик только в конкретные методы следует указать список целевых методов и добавить конечную спецификацию целевых объектов package=* className=* method=* signature=* type=exclude.
  • Указанные имена пакетов и классов дополнительно сравниваются с именами пакетов и классов всех интерфейсов, реализуемых классами. Например, java.util.HashMap реализует интерфейс java.util.Map. Если в объекте Target датчика указана группа java.util, имя класса Map и имя метода size, то датчик будет встроен в метод java.util.HashMap.size() и в методы size всех остальных классов, реализующих интерфейс Map.
  • При сравнении шаблонов не учитываются наследование. Если Derived расширяет класс Base и в объекте Target датчика указано имя Base.run(), то датчик не будет автоматически встроен в Derived.run().
  • Точка ("."), заданная в качестве шаблона группы в спецификации целевых объектов, означает глобальную группу Java без названия. Это позволяет явно задавать классы глобальной группы.
  • Датчики вызова сравнивают с шаблоном группу, класс, имя и сигнатуру вызываемых методов. При этом выполняется сравнение имени (класса и т.д.) вызываемого метода на момент компиляции, то есть статических имен класса и метода, а не имени и класса реального метода, который будет вызван из-за наследования и использования виртуальных функций. Если вызов осуществляется через обращение к интерфейсу, то имя интерфейса также должно соответствовать шаблону.
Пример:

Для того чтобы указать целевой объект, выберите запись Target в дереве на странице Датчики, затем последовательно нажмите кнопки Добавить и Изменить, расположенные в панели редактирования.

В этом примере датчик устанавливается только в методы, имена которых начинаются со строки Get, принадлежащие классам, имена которых заканчиваются строкой Proxy, из группы com.example. Записи целевых объектов типов include и exclude; в записи типа exclude указан символ подстановки, исключающий все методы; запись include задает конкретный набор целевых методов. Прочие классы и методы не обрабатываются.