исполнение Vs. точка соединения
У меня есть два разных аспектных класса для подсчета количества вызовов нестатических методов для выполнения тестовой программы. Первый аспект рассчитывает на методывызов" точки соединения:
pointcut methodCalls() : call (!static * test..*(..));
before(): methodCalls() {
counter.methodCallCounter();
}
в то время как второй аспект рассчитывает на методыисполнение» точки соединения:
pointcut methodCalls() : execution (!static * test..*(..));
before(): methodCalls() {
counter.methodCallCounter();
}
methodCallCounter () - статический метод в классе счетчика.
Количество вызовов метода для небольшой тестовой программы одинаково. Но когда я заменяю тестовую программу более крупной программой, количество вызовов методов во втором классе аспектов (с pointcut выполнения) больше, чем количество вызовов методов в классе аспектов с помощью pointcut call. Это разумно, поскольку точка соединения вызова не отбирает вызовы, сделанные с помощью super, и, следовательно, не учитывает их.
Однако я столкнулся со случаем, когда для конкретного выполнения программы число нестатических вызовов метода в классе аспекта с помощью "вызов pointcut " было больше, чем количество вызовов методов в классе аспектов с "выполнение pointcut ", Я не могу найти никакой интерпретации, почему это происходит. Любая мысль о причине второй ситуации приветствуется.