AOP und dynamische Typisierung
Aspekt-orientierte Programmierung ist schon seit geraumer Zeit eigentlich ein Thema. Meiner Ansicht nach wird aber gerade durch die zunehmende Popularität dynamisch typisierter Sprachen die Sache interessanter. Einer der wesentlichen Vorteile ist eben, dass man auf Methoden-Aufrufe anders reagieren kann und dadurch einfacher generische Programme schreiben kann. Wenn man etwas ähnliches mit statischer Typisierung machen will, bleibt eigentlich nur AOP als Mittel der Wahl. Dazu gibt es
hier einen recht interessanten Artikel, der zeigt, wie man ein DAO generisch bauen kann und dann bei bestimmten Methoden mit Hilfe einer Namenskonvention eine Hibernate-Query ausführen kann. Das entspricht in etwa dem, was Ruby on Rails mit dem Scaffolding auch anbietet.
Umso verwunderlicher oder dramatischer ist es, dass anscheinend bei vielen Entwicklern die Meinung vorherrscht, dass AOP irgendwie kompliziert und unhandhabbar ist. Das merkt man vor allem daran, dass es Spring-Projekte gibt, die in die Richtung gehen, dass sie zwar Spring verwenden wollen, aber nich AOP oder keine eigenen Aspekte schreiben wollen. Meiner Ansicht nach ist das Schreiben von Aspekten gerade mit Spring recht einfach und löst viele Probleme, die man sonst nicht vernünftig lösen könnte. Gerade bei Java EE Projekten entsteht sonst leicht eine Flut an Code, die kaum etwas sinnvolles tut. Beispiele sind oft Exception Handling, Security oder auch Transaktionen.
Daher ist es wichtig, dass AOP mit Spring recht einfach handhabbar ist und mit Spring 2.0 auch eine einfache Migration in Richtung AspectJ möglich ist. Komischerweise scheint aber dennoch die Hürde höher zu sein als jene für das Erlernen einer neuen Sprache. Vielleicht spielt es auch eine Rolle, dass AOP noch das Siegel eines "offiziellen" Standards fehlt. Aber gerade bei Programmiermodellen sind solche Standards nicht immer förderlich und mit Spring oder Struts gibt es auch gute Beispiele für Programmiermodelle, die sich etabliert haben, ohne dass sie Standards sind. Und am Ende kann Code, der mit AspectJ compiliert wurde, auf jeder JVM laufen, weil es eben ganz normaler Bytecode ist - in so fern hält sich AspectJ also auch an die Standards.
Schauen wir mal, wie es da weiter geht. Interface21 ist mit
Adrian Colyer als AspectJ Lead und
Ramnivas Laddad im Bereich AOP ganz gut aufgestellt.