Advices enthalten den eigentlichen Code, der an den Joinpoints eingefügt wird.
Ausgangspunkt für die Advices ist 1Lotto, das ein einfache Implementierung einer virtuellen Trommel zur Ziehung der Lottozahlen enthält. Die Trommel-Klasse enthält auch eine main()-Methode, über die sie die Ziehung anstoßen können. Die Log-Meldungen dazu entstammen dem LogAspect und werden auf System.out ausgegeben.
Wie man über args() auf die übergebenen Methoden-Parameter zugreifen kann, ist im LogAspect ersichtlich, der in 2LottoMitLog zu finden ist. Gestartet wird die Ziehung wieder über die Trommel-Klasse, die Logs landen diesmal über die Log-Klasse in der Datei "Lotto.log".
In 3Konto ist als Einschub und als Beispiel für das Boxing der LogAspect mit den Beispielen aus Kapitel 5.3.3 "Boxing". Zum Starten der Testfälle dient die KontoTest-Klasse.
sie finden im LogAspect auch das Beispiel, um auf verschiedene Argumente (z.B. das erste und letzte) zugreifen zu können.
In 4LottoZiehung kommt die Ziehung-Klasse hinzu. Diese Klasse enthält eine main()-Methode, über die die Ziehung und Auswertung gestartet werden kann. Um dieses Beispiel erfolgreich zu übersetzen, müssen Sie die "asserts" in den Compiler-Einstellungen zulassen (siehe Anhang C.1 im Buch).
Die versprochene Implementierung der getWinners()-Methode aus Kapitel 5.4.2 "After-Advice" finden Sie in Ziehung.java. Im ProfilerAspect finden Sie den Advice zur Zeitmessung aus Kapitel 5.4.3 "Around-Advice". Das Ergebnis wird dabei in der Datei "Profiling.log" abgelegt.
Im MafiaAspect finden Sie das Beispiel, wie Sie den Kontext manipulieren und das Ergebnis einer Methode beeinflussen können -- nicht unbedingt zur Nachahmung emfohlen, aber es zeigt, was alles Möglich ist. Wenn Sie in 4LottoZiehung zum Source-Pfad src/mafia hinzufügen, werden Sie feststellen, dass das Ergebnis, die Liste der Gewinner, eine andere sein wird.
In 5LottoPrecedence finden wir dieses Mal einen ainfacheren MafiaAspect vor, der Einfluas auf den Mischvorgang nimmt. Um diesen Einfluss zu unterbinden, existiert ein CopAspect. Aber welcher von beiden gewinnt jetzt den Kampf? Die Antwort darauf finden Sie in Kapitel 5.5 "Rangeleien" oder im CopAspect.
Um die Vorrangregeln besser zu verstehen, finden Sie dazu in 6PrecedenceDemo als Beispiel einen einfachen PrecedenceDemo-Aspekt.