Nehmen wir an, ich habe eine Auto-Klasse. In meinem Code möchte ich 10 Autos erstellen. Die Klasse "Auto" enthält einige mit @Inject annotierte Abhängigkeiten. Was wäre der beste Ansatz dafür?So erstellen Sie Instanzen im laufenden Betrieb in CDI
CDI hat eine Provider-Schnittstelle, die ich die Autos erstellen können:
@Inject Provider<Car> carProvider;
public void businessMethod(){
Car car = carProvider.get();
}
Leider das funktioniert nicht, wenn ich die nicht über eine CarFactory haben, die eine Methode mit @Produces Anmerkung hat, die erzeugt Auto. So sehr es die reale Welt widerspiegelt, dass ich keine Autos ohne Fabrik bauen kann, ich möchte lieber keine Fabriken für alles schreiben. Ich möchte nur, dass der CDI-Container mein Auto wie jede andere Bohne erstellt. Wie empfehlen Sie, dass ich diese Autos erstelle?
Das ist eigentlich, was ich am Ende benutzt habe.Könnten Sie Ihr Beispiel korrigieren, ist das Konstruktorargument nicht vom selben Typ wie das Klassenattribut: Car vs UIModule. Auch ich denke, die Injektion sollte Annotetade mit @New statt @Any sein. Und ein besseres Beispiel für die use() - Methode wäre eine, die zeigen würde, wie Sie eine Instanz des Autos bekommen würden. Zum Beispiel 'carInstances.get()' – palto
@New ist in CDI 1.1 veraltet, bevorzugt von @Dependent Beans. Siehe CDI 1.1, Abschnitt 3.14. Ich verstehe es nicht wirklich, was ist los mit einem Anbieter, ich. e., 'CDI.current(). select (Car.class) .get()'? –
@MartinAndersson Das ursprüngliche Problem war, dass ich eine Fabrik für die Verwendung eines Anbieters erstellen musste. Das Beispiel, das Sie im Kommentar angegeben haben, ist für mich völlig neu. Vielleicht könnten Sie daraus eine Antwort erstellen? – palto