Spring 2.0Mittlerweile ist Spring 2.0 M1 erhältlich, was eine Vorrausschau auf einige wichtige Features erlaubt.
Eines ist die Möglichkeit, auch Objekte per Spring zu konfigurieren, die mit new erzeugt werden. Dazu kommt hinter den Kulissen AspectJ zum Einsatz. Bisher wurde ein Spring-Anwendung aus Diensten wie DAOs oder Geschäftsprozessen gebaut, die dann jeweils fachliche Klassen austauschen. Diese werden typischerweise nicht mit Spring verwaltet. Durch dieses neue Feature kann man zum Beispiel solche fachlichen Klassen durch Spring verwalten lassen und ihnen Referenzen z.B. auf den DAO mitgeben. Dadurch kann man dann an der fachlichen Klassen save() aufrufen, was dann an das DAO weiterdelegiert wird.
Eigentlich ist das ein schönes Feature, weil die Trennung in DAOs und Services auf der einen Seite und fachliche Klassen auf der anderen Seitet der Objektorientierung widerspricht: Man will ja eigentlich Objekte haben, an denen man Methoden aufrufen kann und nicht nur objektorientierte Datenmodellierung betreiben. Ich bin mir allerdings nicht so sicher, ob das tatsächlich ein so gutes Features ist. Denn auf diesem Weg verliert man die Möglichkeit, die fachlichen Klassen ohne die Dienste zu verwenden. Bei der Übertragung solcher Objekte zwischen Client und Server sind dann lustige Effekte zu benfürchten, weil man die Dienste kaum sinnvoll mit übertragen kann. Das ist ein wenig so wie das Hibernate Lazy Loading Problem, das auch auftritt, wenn man die Objekte dann zum Client schicken will. An sich ist die interessante Sache die, dass man durch Spring und SOA zu Service-orientierten Systemen kommt und die reine Objektorientierung nicht mehr so erstrebenswert erscheint.
Die restlichen Spring 2.0 Features sind eindeutig positiv: Die Konfiguration wird durch XML Schemas vereinfacht, so dass man Features wie AOP wesentliche einfacher handhaben kann. Das einzige Problem hier ist, dass die einzelnen Spring Beans und ihre Zusammenarbeit zum Teil nicht mehr so klar zu erkennen sind, aber das ist eher Information Hiding als ein Problem. Und man muss mehr unterschiedliche XML Schemas kennen.
Ein weiteres Feld ist die neue AspectJ Syntax. Zum einen werden Pointcuts jetzt so ausgedrückt und zum anderen kann man mit der AspectJ Syntax auch Klassen durch Annotationen zu Aspekten machen. Mir gefällt beides recht gut. Die Syntax von AspectJ ist mächtiger und vor allem kann man so später hoffentlich einmal die Spring AOP Laufzeitumgebung transparent gegen AspectJ austauschen. Das wiederum erhöht dann die Wahlfreiheit des Entwickler.
Noch eine kleine Eigenwerbung: Wenn alles so läuft, wie ich hoffe, wird mein Buch weltweit das erste Buch überhaupt sein, das Spring 2.0 behandelt... Hoffen wir also das beste! Auf jeden Fall bleibt Spring eine spannende Plattform.