Hinrichtung Vs. Verbindungspunkt anrufen

Ich habe zwei verschiedene Aspektklassen, um die Anzahl der nicht statischen Methodenaufrufe für die Ausführung eines Testprogramms zu zählen. Der erste Aspekt betrifft Methoden für "Aufruf" -Verbindungspunkte:

pointcut methodCalls() : call (!static * test..*(..));
before(): methodCalls() {
        counter.methodCallCounter();
}

Während der zweite Aspekt Methoden für "Ausführungs" -Verbindungspunkte zählt:

pointcut methodCalls() : execution (!static * test..*(..));
before(): methodCalls() {
        counter.methodCallCounter();
}

methodCallCounter () ist eine statische Methode in der Zählerklasse.

Die Anzahl der Methodenaufrufe für kleine Testprogramme ist gleich. Wenn ich jedoch das Testprogramm durch ein größeres Programm ändere, ist die Anzahl der Methodenaufrufe in der zweiten Aspektklasse (mit Ausführungspunkt) größer als die Anzahl der Methodenaufrufe in der Aspektklasse mit Aufrufpunkt. Dies ist sinnvoll, da der Call Join Point die mit super getätigten Anrufe nicht auswählt und daher nicht mitzählt.

Ich bin jedoch auf einen Fall gestoßen, in dem für die spezifische Programmausführung die Anzahl der nicht statischen Methodenaufrufe in der Aspektklasse mit "call pointcut" höher war als die Anzahl der Methodenaufrufe in der Aspektklasse mit "execution pointcut". Ich kann keine Interpretation finden, warum dies geschieht. Jeder Gedanke über den Grund der zweiten Situation wird geschätzt.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage