Eclipse 4 Dependency Injection mit dem Spring Framework

Nutzung des Services

Jetzt kann man sich den Service indizieren lassen. Das funktioniert automatisch für alle Klassen aus dem Eclipse-4-Applikationsmodell:

// Field Injection
@Inject IService service;

Das zeigt die Konsistenz des Eclipse-4-Programmiermodells. In unserem Beispiel definiert der Service u. a. die getConfig()-Methode. Diese kann man aufrufen und den Wert in seiner Applikation verwenden. Um das Beispiel vom Source-Download zu starten, importiert man alle Plug-ins in seinen Workspace und startet das Produkt aus dem com.vogella.e4.rcp.blueprintservice-Plug-in. Hierbei müssen sich die Spring Bundles in der Target-Plattform befinden. Die Klasse SamplePart.java nutzt den Service und schreibt ihn in ein Textfeld.

Spring DM vs. OSGi Blueprint Services

Spring DM 2.x unterstützt Blueprint Services, bietet aber auch ein eigenes XML-Konfigurationsschema und eigene MANIFEST.MF Header an, die eine gegenüber Blueprint Services erweiterte Funktionalität erlauben.

Zusätzliche Features von Spring DM gegenüber dem Standard Blueprint Service sind Feld- und Methodeninjektion und Möglichkeiten wie zum Beispiel Bean und Bean Definition Processing. Auch beim Import und beim Export von OSGi Services und bei der Definition von entsprechenden Optionen in der XML-Konfiguration und in der MANIFEST.MF bietet Spring gegenüber dem OSGi-Standard erweiterte Möglichkeiten, die z. B. in der Spring-DM-Dokumentation aufgelistet sind [6]. Wann sollte nun die Konfiguration als Spring DM Services und wann die als OSGi Blueprint Services erfolgen? Wenn bisher noch kein Spring DI verwendet wird und keine neue Abhängigkeit eingeführt werden soll, dann sind die Blueprint Services eine gute Wahl. Viele wichtige Anwendungsfälle lassen sich damit realisieren, und die Blueprint-Service-Implementierung kann ggf. ausgetauscht werden. Werden die erweiterten Features von Spring DM benötigt oder wird eine OSGi Runtime in einer Version vor 4.2 verwendet, so muss auf den Spring-Dialekt zurückgegriffen werden. Wird sowieso schon der Spring DI Container (ohne DM) verwendet, ist es unter Umständen hilfreich – auch ohne dass erweiterte Funktionen benötigt werden oder dass eine „ältere“ OSGi Runtime verwendet wird – den Spring-Dialekt zu wählen, um zumindest bei der Definition der „Beans“ auf gewohnte und einheitliche Syntax zurückgreifen zu können.

Zusammenfassung

Wie man gesehen hat, ist die Konfiguration von OSGi Blueprint Services relativ leicht. Wer sich noch an die Konfiguration von OSGi Services via Programmcode und die notwendige Logik für dynamische Services erinnert, wird erleichtert aufatmen. Und die Nutzung dieser Services in Eclipse-4-Applikationen? Man nehme @Inject bzw. eine der spezialisierteren Annotationen – und schon hat man den Service. Leichter kann eine Integration verschiedener Komponenten kaum gehen.

Durch die gezeigte Integration lassen sich die Vorteile und Möglichkeiten des mächtigen Spring-DI-Containers in vielen Fällen mindestens genauso einfach in Eclipse-4-RCP-Applikationen nutzen, wie dies mit der Spring Extension Factory und Eclipse 3 möglich war. Das ist eben Eclipse 4: Das Einfache ist einfach, das Komplizierte ist möglich, das Ungewöhnliche ist ebenfalls möglich. Eine Blueprint-Integration fällt in die Kategorie „einfach“.

Lars Vogel ist Geschäftsführer und Gründer der vogella GmbH, die professionelle Services im Bereich Eclipse und Android anbietet. Lars ist Committer im Eclipse-4-Projekt und hat das Buch „Eclipse 4 Application Development“ veröffentlich. Des Weiteren hat Lars verschiedene Auszeichnungen erhalten, u. a. „Eclipse Top Contributor“ und „Eclipse Top Newcomer Evangelist“ und ist kürzlich zum „Java Champion“ von Oracle gekürt worden.

Felix Heppner arbeitet seit 2003 bei der Plath GmbH, wo er als Softwareentwickler (C++) begann und seit 2005 als System- und Softwarearchitekt tätig ist. Seit 2007 ist er verantwortlich für die technische Realisierung einer COMINT-Produktplattform auf Java- und Eclipse-RCP-Basis und maßgeblich an der fachlichen Definition der Plattform sowie eines Entwicklungsprozesses zur Plattformentwicklung beteiligt.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.