# Verbindung von Dependency Injection und Objektregistrierungen



## inv_zim (24. Jun 2011)

Hi,

ich habe hier in der Firma zurzeit mit einem Projekt zu tun, wo es um eine Art Nachrichtenbehandlung geht. Ich versuche zurzeit, die Abhängigkeiten mit Dependency Injection über Google Guice zu minimieren.

An einer Stelle existiert eine Klasse "MessageManager", in welcher ein Nachrichtenobjekt mit dem Attribut "MessageType" verarbeitet wird. Dieser MessageManager hält eine HashMap<MessageType, MessageHandler>, in welcher verschiedene Objekte vom Typ "MessageHandler" registriert sind. Der Manager holt aus der Hashmap den passenden MessageHandler für die Nachricht, die Nachricht wird an ihn weitergeleitet und er verarbeitet diese. (Etwas kompliziert beschrieben, aber das posten von Code ist mir von hier aus nicht möglich).

Im MessageManager können beliebig viele MessageHandler registriert werden. Macht DI hier überhaupt noch sinn? Die einzelnen MessageHandler besitzen auch Attribute, die ich gerne injizieren würde, aber jeden einzelnen MessageHandler an einer Stelle des Programms über Guice instantiieren, um ihn dann an ein anderes instantiiertes anzuhängen, erscheint mir keine schöne Lösung. Wie würdet ihr das Lösen, die DI außen vor lassen?

Danke fürs Lesen und schönen Gruß,

Tim


----------



## Landei (24. Jun 2011)

Kennst du "vorher" alle benötigten MessageHandler? Dann würde sich der SPI-Mechanismus anbieten, der sich auch leicht mit Guice kombinieren lässt: Du gibst alle MessageHandler in einer Textdatei an, und lässt sie von Guice laden. Ich hatte das mal in meinem Blog beschrieben.


----------



## inv_zim (24. Jun 2011)

Hi,

klasse Artikel, vielen Dank! Den SPI-Mechanismus kannte ich auch noch nicht. Da die MessageHandler alle bekannt sind und zur Laufzeit nicht geändert werden, hast du mir also gerade sehr weitergeholfen! 

Einen schönen Tag noch,

Tim


----------



## Wildcard (24. Jun 2011)

Du kannst bei Guice auch einen Multibinder verwenden (zB den MapBinder) um das direkt so abzubilden.
Multibindings - google-guice - Overview of Multibinder and MapBinder extensions - Guice (pronounced 'juice') is a lightweight dependency injection framework for Java 5 and above, brought to you by Google. - Google Project Hosting


----------

