Als ich mir vor ein paar Tagen die aktuelle JavaSpektrum zugelegt habe, sah der Inhalt ganz vielversprechend aus. Modelbasierte Entwicklung (hieß es bisher nicht immer modellgetriebene Entwicklung?), neues von AspectJ - die Themenliste klang gut. Nachdem ich dann allerdings den zweiten Artikel las, der mit der versprochenen Ãœberschrift relativ wenig zu tun hatte, kam schon eine Art Misstimmung auf. Ein Artikel, der angeblich die Arbeit mit den Eclipse WST dokumentieren sollte, entpuppte sich als kurzer Abriss über Spring, Axis und das Java Caching System. Für das WST blieben dann noch ein paar kurze Zeilen, die allerdings nicht mehr Information beinhalteten als die gemeinhin bekannten Eclipse Tutorials. Dann stieß ich (mal wieder) auf einen Fehler, der meiner Meinung nach penetrant übersehen wird…
Der Artikel über AspectJ ging natürlich auf die Grundlagen aspektorientierter Programmierung ein. Als Anwendungsbeispiel für AOP fällt in jedem Artikel eigentlich das Thema Logging. Was dabei immer verschwiegen wird ist, das mit “Logging mit AOP” nichts anderes gemeint ist als Tracing mit AOP. Das Pointcutmodell von AOP Implementierungen wie AspectJ oder Spring AOP bezieht sich sinnvollerweise auf Methodenaufrufe.
Praktisch bedeutet das, das man mit AOP die Möglichkeit hat Methodenaufrufe abzufangen und Code vor der Ausführung der Methode, nach der Ausführung und im Falle einer Exception auszuführen. Und da liegt auch schon der Hase im Pfeffer begraben. Ich weiß nicht, wie es euch geht, aber in meinem Quellcode stehen Logausgaben nicht nur am Anfang oder Ende einer Methode bzw. im Catchblock. Detaillierteres Logging für den Debugmodus (z.B. in verschiedenen If-Zweigen) ist schlichtweg nicht mit AOP möglich.
Warum diesen Fakt niemand bei seinen Artikeln im Netz oder in Fachzeitschriften klarstellt, bleibt mir schleierhaft. AOP Anfänger (zu denen ich mich auch noch zähle) verwirrt das ganze doch ein wenig…