Пример фрагмента датчика в области действия класса

В этом примере показано использование фрагмента датчика в области действия класса.

В этом примере датчик подсчитывает число экземпляров, созданных во всех классах в пакетах, отвечающих шаблону com.sample*, и сообщает о создании каждого сотого экземпляра.

Значение "fragment at class scope" определяет счетчик, отображающийся в статическом поле int-type в классе, в котором скомпилирован фрагмент entry. Фрагмент также объявляет статический инициализатор для класса fragment, который сообщает о загрузке датчика. Обратите внимание на то, что элементы в разделе фрагмента встроены в сгенерированный класс датчика, а не в классы, в которые встроен датчик. Для вставки статических полей или статической логики инициализации в классы, к которым применен датчик, применяются фрагменты типа staticInitializer или статические поля.

Датчик определяется следующими записями в редакторе Probekit:
  • Код Java фрагмента в области действия класса (в дереве выберите запись Probe и укажите следующее значение):

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

  • Target (для ввода этих значений выберите в дереве запись Target и нажмите кнопку Изменить):
    • Целевой тип: include
    • Пакет: com.sample* (укажите фактическое имя пакета).
    • Класс: *
    • Метод: <init>
    • Сигнатура: *
  • Target (для ввода этих значений выберите Добавить, затем в панели редактирования нажмите кнопку Изменить):
    • Целевой тип: exclude
    • Пакет: *
    • Класс: *
    • Метод: *
    • Сигнатура: *
  • Fragment (выберите в дереве запись Fragment и укажите следующие значения):
    • Тип фрагмента: entry
    • Код Java:

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