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