Frage

Ich habe eine guice basierte Anwendung, die jetzt mehrere Instanzen eines bestimmten Typs benötigt, damit ich auf dem mit einem Namen Anmerkung plane die Abhängigkeiten eindeutig zu machen. Doch eine Abhängigkeit dieser Art muss auch variieren, je nachdem welcher ich.

Zur Veranschaulichung kann sagen, ich habe

@Singleton
public class FooCache {
    private final FooCacheListener listener;
    @Inject 
    public FooCache(FooCacheListener listener) {
        this.listener = listener;
    }
    // do stuff
}

und dann kann sagen, dass ich ein Bedürfnis nach 2 separaten Instanzen habe, damit ich haben könnte

@ThatOne FooCache

in einer Klasse und

@ThisOne FooCache

in einem anderen.

Jetzt kann sagen, ich einen anderen Hörer in jedem Fall will (vielleicht schreibt man etwas in eine Datenbank und die andere senden eine Benachrichtigung über JMS oder zu einem verteilten Cache). Wie würde ich das tun? Ich kann nicht sehen, dass ich einen Namen auf dem FooCacheListener halten kann, wie ich gegen die andere einen anderen Namen in einer Situation brauchen würde, während ich hier nur einen Platz haben. Die einzige Möglichkeit, die ich denken kann, dies zu tun ist durch Subklassen FooCache aber das scheint einen wirklich ungeschickt Ansatz zu mir.

Prost Matt

War es hilfreich?

Lösung

Sie könnten in der Lage sein PrivateModules zu verwenden. Gehen Sie hier und scrollen Sie auf Wie kann ich Bau von zwei ähnlichen, aber etwas andere Bäume von Objekten? Es ist eine Möglichkeit, zwei verschiedene Instanzen derselben Klasse zu haben, die fast genau klingt, was Sie zu tun versuchen. Sie könnten in Ihrem cachelisteners statt der „Lefty“ und „righty“ bestanden in im Beispiel passieren. Es gibt mehr Links mit Informationen von dort, wenn es sieht aus wie das, was Sie wollen.

Eine weitere Option könnte sein, um eine Fabrik zu injizieren, die auch in dem Link oben diskutiert wird, in der Frage Wie gebe ich einen Parameter, wenn ein Objekt über Guice zu schaffen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top