Ich verwende Spring, um Phasen in meiner Anwendung zu definieren. Es ist konfiguriert, dass der erforderlichen Klasse (hier genannt Configurator
) die Stufen injiziert werden.
Jetzt brauche ich die Liste der Stufen in einer anderen Klasse mit dem Namen LoginBean
. Der Configurator
bietet keinen Zugang zu seiner Liste der Stufen.
Ich kann die Klasse nicht ändern Configurator
.
Meine Idee:
Definieren Sie eine neue Bohne namens Stages und injizieren Sie sie in Configurator
und LoginBean
. Mein Problem mit dieser Idee ist, dass ich nicht weiß, wie ich diese Eigenschaft transformieren soll:
<property ...>
<list>
<bean ... >...</bean>
<bean ... >...</bean>
<bean ... >...</bean>
</list>
</property>
in eine Bohne.
So etwas funktioniert nicht:
<bean id="stages" class="java.util.ArrayList">
Kann mir jemand dabei helfen?
<property name="beanList" ref="myList"/>
@Autwired
dies beim Einfügen einer auf diese Weise erstellten Liste nicht hilft. Funktioniert jedoch@Resource
. dh@Resource List<String> myList
Hier ist eine Methode:
quelle
StageClass
Bean-Deklarationen einzubetten,<list>
um die Notwendigkeit der<ref>
Elemente zu vermeiden .Eine weitere Option ist die Verwendung von JavaConfig. Angenommen, alle Stufen sind bereits als Frühlingsbohnen registriert, müssen Sie nur:
und spring fügt sie automatisch in diese Liste ein. Wenn Sie die Ordnung bewahren müssen (die obere Lösung tut das nicht), können Sie dies folgendermaßen tun:
Die andere Lösung zur Aufrechterhaltung der Ordnung ist die Verwendung einer
@Order
Anmerkung zu Bohnen. Die Liste enthält dann Beans, die nach aufsteigendem Anmerkungswert sortiert sind.quelle
Und in SomeClass:
quelle
Stacker gab eine großartige Antwort, ich würde einen Schritt weiter gehen, um es dynamischer zu machen und Spring 3 EL Expression zu verwenden.
Ich habe versucht herauszufinden, wie ich dies mit der util: list tun kann, konnte es aber aufgrund von Konvertierungsfehlern nicht zum Laufen bringen.
quelle
Ich denke, Sie suchen vielleicht
org.springframework.beans.factory.config.ListFactoryBean
.Sie deklarieren eine ListFactoryBean-Instanz, geben die zu instanziierende Liste als Eigenschaft mit einem
<list>
Element als Wert an und geben der Bean einid
Attribut. Jedes Mal, wenn Sie die deklarierteid
alsref
oder ähnlich in einer anderen Bean-Deklaration verwenden, wird eine neue Kopie der Liste instanziiert. Sie können auch dieList
zu verwendende Klasse angeben .quelle
Definiere diese Beans (test1, test2) danach :)
quelle
Verwenden Sie den util-Namespace, um die Liste als Bean in Ihrem Anwendungskontext zu registrieren. Sie können die Liste dann wiederverwenden, um sie in andere Bean-Definitionen einzufügen.
quelle
Als Ergänzung zu Jakubs Antwort können Sie, wenn Sie JavaConfig verwenden möchten, auch auf diese Weise automatisch verdrahten:
quelle
Sie entfernen
id
nur aus Bohnen innerhalb des<list>
Tags. So was:quelle
Und so injizieren Sie Set in eine Eigenschaft im Frühjahr:
quelle
Injizieren Sie eine Liste von Zeichenfolgen.
Angenommen, Sie haben eine Modellklasse für Länder, die eine Liste von Zeichenfolgen wie unten enthält.
Nach der XML-Definition definieren Sie eine Bean- und Inject-Liste der Länder.
Referenz - Link
Injizieren Sie die Liste der Pojos
Angenommen, Sie haben eine Modellklasse wie unten.
Bohnendefinitionen.
Referenz Verbindung .
quelle