2009-04-03 17 views
5

Ich schreibe eine Java-Bibliothek, die von einer vorhandenen Anwendung verwendet wird. Ich verwende Dependency Injection, so dass das Testen einfacher ist, und ich kenne Spring, daher plante ich, es zu verwenden, um die Abhängigkeitsinjektion während des Tests zu verwalten. Die Anwendungen, die schließlich die Bibliothek verwenden werden, sind jedoch weder Spring-basiert noch verwenden sie derzeit einen beliebigen IoC/DI-Container. Meine Frage ist, was ist der beste Ansatz zum Injizieren von Abhängigkeiten, wenn Spring oder Guice nicht verwendet werden? Sollte ich etwas wie eine Fabrikmethode betrachten, um die Objekte zu instantiieren und zu verdrahten? Die Abhängigkeiten befinden sich alle in der Bibliothek. Daher scheint es nicht angebracht zu sein, dass die Anwendung jede Abhängigkeit instanziiert, um das Hauptobjekt zu erstellen.Verwenden der Abhängigkeitsinjektion in einer Bibliothek

Antwort

4

Was ist der beste Ansatz zum Injizieren von Abhängigkeiten, wenn Spring oder Guice nicht verwendet werden?

Wenn Ihre Bibliothek in einem DI-freundlichen Idiom geschrieben wurde. Es sollte ziemlich einfach sein, als straitforward Java API zu verwenden. Denken Sie an Ihre frühere Erfahrung mit dem Frühling. Es gibt mehrere Bibliotheken, die perfekt zum Frühlingsmodell passen, aber vor dem Frühling geschrieben wurden. Ich sehe nichts schlechtes mit einer new gefolgt von ein paar setXX gefolgt von einem Aufruf an die echte Arbeit Methode. Seien Sie besonders vorsichtig, da Ihr Kunde unter anderem vergessen kann, die init Methoden zu nennen, die zuverlässig anrufen.

Sollte ich etwas wie eine Fabrikmethode betrachten, um die Objekte zu instanziieren und zu verdrahten? Die Abhängigkeiten befinden sich alle in der Bibliothek. Daher scheint es nicht angebracht zu sein, dass die Anwendung jede Abhängigkeit instanziiert, um das Hauptobjekt zu erstellen.

Lassen Sie die Client-Anwendung entscheiden. Sie stellen eine Bibliothek zur Verfügung. Lassen Sie den API-Client seine eigenen Objekte verdrahten. Geben Sie ein Beispiel an. Später kann dasselbe Beispiel verwendet werden, um die Factory-Methode in der Domäne des Clients zu erstellen. Vielleicht hat die Client-Anwendung ihre eigene Art, sich selbst zu konfigurieren, und es wäre wünschenswert, wenn die API, die Ihre Bibliothek bereitstellt, flexibel genug ist, um davon zu profitieren.

Oder vielleicht können Sie guice einschließen. Die Lizenz ist Apache. Genau wie ein ganzes Stück Java selbst.

Verwandte Themen