Vorweg: Vaadin ist cool. Das auf dem Google Web Toolkit basierende Framework erlaubt die komponenten-orientierte Entwicklung hochqualitativer Rich Internet Applications. Dabei wird weitestgehend vom HTML/Servlet Code abstrahiert – das Programmiermodell erinnert somit stark an die vom Desktop gewohnte Entwicklung mit Swing oder RCP. JSP-Taglibs, XML-Wüsten und Platzhalter-Replacements sucht man vergebens, und man vermisst sie auch nicht.
Eine typische Vaadin-Applikation (aus Book of Vaadin, Getting started):
public void init() { final Window mainWindow = new Window("Myproject Application"); Label label = new Label("Hello Vaadin user"); mainWindow.addComponent(label); mainWindow.addComponent( new Button("What is the time?", new Button.ClickListener() { public void buttonClick(ClickEvent event) { mainWindow.showNotification( "The time is " + new Date()); } })); setMainWindow(mainWindow); }
Sobald die Anwendung etwas größer wird, bekommt man jedoch zwangsläufig die klassischen Stand-Alone-Anwendungsprobleme: verschachtelte Komponenten, ausgelagerte Handler, implementierte Listener, gekapselte Service-Facaden … ein Haufen Instanzen will erzeugt und verwaltet werden. Nebenbei arbeitet man auf 3 Scopes (Application, Session, Request), bemüht sich um Separation of Concern und achtet auf maximale Testbarkeit.
Das wird „per Hand“ schnell unübersichtlich. Naheliegend ist, sich bei der Verwaltung der Instanzen helfen zu lassen. Wenn man das Pech hat, nicht auf JEE6 und CDI zurückgreifen zu können (konkret arbeiten wir nach wie vor auf JBoss 5.1), ist die Frage:
Wie?
Oder anders formuliert: Spring oder Guice?