Mam dwie różne klasy aspektu, aby policzyć liczbę niestatycznych wywołań metod dla wykonania programu testowego. Pierwszy aspekt liczy metod na punkty „call” join:Vs wykonania. call Join point
pointcut methodCalls() : call (!static * test..*(..));
before(): methodCalls() {
counter.methodCallCounter();
}
natomiast drugi aspekt liczy metod na „wykonanie” join punktów:
pointcut methodCalls() : execution (!static * test..*(..));
before(): methodCalls() {
counter.methodCallCounter();
}
methodCallCounter() jest metodą statyczną w klasie licznika.
Liczba wywołań metod dla małego programu testowego jest taka sama. Ale kiedy zmieniam program testowy na większy program, liczba wywołań metod w drugiej klasie aspektu (z pointcutem wykonania) jest większa niż liczba wywołań metod w klasie aspektu z wycinkiem połączeń. Jest to uzasadnione, ponieważ punkt połączenia nie wybiera połączeń wykonanych z super i dlatego ich nie liczy.
Jednak spotkałem się z przypadkiem, w którym dla konkretnego wykonania programu liczba niestatycznych wywołań metod w klasie aspektu z "call pointcut" była wyższa niż liczba wywołań metod w klasie aspektu z "wykonanie pointcut" . Nie mogę znaleźć żadnej interpretacji, dlaczego tak się dzieje. Uważa się każdą myśl o przyczynie drugiej sytuacji.
Nie jestem pewien ... Polecam wydrukowanie informacji o różnicach. Być może wydrukuj obiekt "thisJoinPoint". –