Spring – mehr als nur Dependency Injection

10. April 2014Tom Hombergs

Das Spring-Framework ist in der Java-Welt kaum noch wegzudenken. Laut einer Umfrage der Firma ZeroTurnaround wurde Spring schon im Jahr 2011 in fast der Hälfte aller Java-Projekte genutzt (Quelle: http://zeroturnaround.com/rebellabs/java-ee-productivity-report-2011/). Vielen ist aber gar nicht bewusst, dass Spring mehr ist als “nur” ein Dependency Injection Container. Ein paar versteckte Features von Spring werden hier vorgestellt.

Testing mit Spring

Spring bietet beispielsweise einen umfassenden Support für Unit-Tests. Dazu gehört zum einen der automatische Aufbau eines Spring-Kontexts mit der @ContextConfiguration-Annotation. Dieser Kontext instanziiert automatisch alle für einen Test benötigten Objekte und stellt sie ihm für die Laufzeit zur Verfügung. Das steigert die Produktivität bereits bei der Erstellung von Tests. Spring bietet darüber hinaus aber noch die Möglichkeit, diverse Komponenten zu mocken, also für einen Test zu simulieren. So kann zum Beispiel mit den folgenden drei Zeilen XML-Konfiguration eine In-Memory-Datenbank aufgebaut werden, die von Spring automatisch beim Starten des Tests hochgefahren und mit Testdaten befüllt wird:

Neben einer Datenbank spielt in vielen Deployment-Szenarien ein JNDI-Container eine Rolle, über den diverse Ressourcen wie z.B. Datenbank-Connections vom Application Server zur Verfügung gestellt werden. Unit-Tests für Komponenten, die auf einen solchen JNDI-Container zugreifen, können nur ausgeführt werden, wenn dieser JNDI-Container zum Testzeitpunkt auch zur Verfügung steht. Spring bietet auch hier eine einfache Möglichkeit, einen solchen Container zu mocken. Die folgenden Zeilen Java-Code starten einen JNDI-Container und befüllen ihn im Beispiel mit einem selbst erstellten und für den Test angepassten Mock-Objekt:

Internationalisierung

Viele Anwendungen werden für Benutzer über Länder- und Sprachgrenzen hinweg entwickelt. Spätestens dann ist es erforderlich, dass alle Textelemente der Benutzeroberfläche in mehreren Sprachen gepflegt werden – möglichst so, dass sie zentral zugreifbar und gut wartbar sind. In Java sind ResourceBundles das Standardmittel der Wahl. Man definiert für jede Sprache eine oder mehrere Properties-Dateien mit Key-Value-Paaren, in denen die Textelemente übersetzt werden.

Spring setzt auf diesem Mechanismus auf und vereinfacht den Zugriff sowie die Verwaltung von ResourceBundles. Mit der folgenden XML-Konfiguration wird beispielsweise der Zugriff auf die ResourceBundles “exceptionMessages” und “logMessages” zentralisiert.

Auf Inhalte beider ResourceBundles kann dann mit dem folgenden Java-Code zugegriffen werden. Sollte sich ein ResourceBundle zur Laufzeit ändern, werden die Änderungen übrigens spätestens nach zehn Sekunden auch der Anwendung zur Verfügung gestellt.

Event-Bus

Ein weiteres nicht so bekanntes Feature von Spring ist der Event-Mechanismus. Der Spring-Kontext kann als Quelle und Senke von Events dienen, die aus der Anwendung heraus gefeuert werden können. Ein Event zu feuern ist sehr einfach, wie der folgende Code-Ausschnitt zeigt:

Um auf ein solches Event zu reagieren, muss man lediglich das von Spring zur Verfügung gestellte ApplicationListener-Interface implementieren:

Auf diese Weise kann man die Komponenten einer Anwendung lose koppeln, ohne selbst einen Event-Mechanismus implementieren zu müssen.

Flexible Architekturen

Neben den hier beschriebenen Features bietet das Spring-Ökosystem eine Fülle von kleinen und großen Features, die das Entwicklerleben vereinfachen können. Auch eine Integration mit anderen Frontend- oder Backend-Frameworks ist meistens bereits vorhanden. Da Spring sehr integrationsfreundlich ist, ist es nicht allzu kompliziert, eine solche Integration selbst zu implementieren, sollte ein verwendetes Framework mal keine Spring-Unterstützung bieten. Spring ist also eine gute Wahl, wenn es darum geht, eine möglichst flexible Software-Architektur aufzusetzen. Mit einer solchen Architektur muss man sich vor größeren Refactorings, wie sie in jeder Software mal anstehen, nicht mehr fürchten.

Nutzen Sie diese Features bereits? Ich freue mich auf den Austausch mit Ihnen.

Tags: ,
Tom Hombergs Tom Hombergs ist seit 2007 bei adesso beschäftigt. Als Senior Software Engineer arbeitet er in wechselnden Projekten und Rollen an der Konzeption und Entwicklung von Web-Anwendungen auf Basis von Java-Technologien.
Artikel bewerten:
1 Star2 Stars3 Stars4 Stars5 Stars
Loading...

Kommentar hinzufügen:

Ihr Kommentar: