In Guice 2 oder 3 gibt es so genannte Assisted / Partial Inject, die hier beschrieben werden. Mit Guice synthetisiert die Factory-Implementierung (die meine Schnittstelle implementiert) für mein Objekt und einige der Konstruktorargumente werden von Guice injiziert und einige werden aus dem Kontext bereitgestellt.
Ist es möglich und wie macht man das Gleiche mit Spring?
Folgendes tut genau das, wonach ich gefragt habe. Obwohl es die Implementierung der Factory nicht synthetisiert, ist es gut genug, da die Factory Zugriff auf den Injektionskontext hat, so dass andere Beans (injizierbare Artefakte) verwendet werden können Konstruktion. Es verwendet Java-basierte @Configuration
anstelle von XML, aber es wird auch mit XML arbeiten.
Die Fabrikschnittstelle:
%Vor%
// Dies ist die Spring-Konfiguration, die zeigt, wie man die assistierte Injektion macht
%Vor%Der Testcode:
%Vor% Damit wird genau das erreicht, was Guice macht. Der knifflige Unterschied ist der Scope
. Der Standardbereich von Spring ist Singleton
und Guice ist nicht (es ist ein Prototyp).
AFAIK können Sie nicht. Im Frühjahr können Sie Instantiierung mit a statische Fabrikmethode oder Instanziierung mithilfe einer Instanz-Factory-Methode . Mit der zweiten Option können Sie eine Bean myFactoryBean
definieren, die als Factory für eine andere Bean arbeitet. Sie können auch Konstruktionsargumente an myFactoryBean
übergeben, indem Sie constructor-arg
verwenden (siehe zum Beispiel den Abschnitt Verwenden einer Instanz Factory-Methode in diesem Blog ), die Ihnen das Äquivalent von Guice-injizierten Argumente. Ich kenne jedoch keine Möglichkeit, beim Aufruf der Factory-Methode weitere Argumente aus dem Kontext bereitzustellen.
Tags und Links java spring dependency-injection