Property einer Bean auf Property einer anderen Bean setzen?

DarthShader

Erfahrenes Mitglied
Hallo,

ich habe eine Frage zum Spring IoC Container. Ist es möglich, die Property einer Bean auf einen Wert zu setzen, der wiederum eine Property einer anderen Bean ist?

Beispiel: Property "propA" von Bean "A" soll auf Property "propB" von Bean "B" gesetzt werden:

XML:
<bean id="A" class="...MyClass">
	<property name="propA" ref="B.propB" />
</bean>


Ist das irgendwie möglich? Oder MUSS hier "propB" selbst auch als Bean vorliegen?


Vielen Dank für Eure Hilfe
 
Zuletzt bearbeitet von einem Moderator:
XML:
<bean id="A" class="...MyClass">
  <property name="propA">
    <bean factory-bean="yourBean" factory-method="getValue" />
  </property>
</bean>

Dem Beanelement innerhalb des property Elements kannst du auch per <constructor-arg /> Element Methodenparameter für die factory-method mitgeben.

REINHAUN!
 
Zuletzt bearbeitet von einem Moderator:
Hallo Olliver,

vielen Dank für Deine Antwort. Wenn ich das richtig verstehe, müsste der XML Code auf mein Beispiel angewendet dann so aussen?

XML:
<bean id="A" class="...MyClass">
  <property name="propA">
    <bean factory-bean="B" factory-method="getPropB" />
  </property>
</bean>

Man nutzt damit quasi den Mechanismus ja aus, es wird ja gar keine Bean neu erzeugt, sondern das Ergebnis von "getProbB einfach als property "propA" für Bean "A" gesetzt.

Ist das so alles korrekt, oder mißverstehe ich etwas?
 
Zuletzt bearbeitet von einem Moderator:
Ich habe es gerade einmal ausprobiert, so sieht mein echter Kontext für eine Bean aus:

XML:
<bean id="simpleNoticeController" class="....SimpleNoticeController">
	<property name="appWindow">
		<bean factory-bean="uiController" factory-method="getAppWindow" />
	</property>
</bean>

"uiController" ist eine andere Bean, die in ihrer Initialisierungsmethode einen JFrame als Programmfenster erstellt und damit sein eigenes Property "appWindow" setzt.

Die obige Definition soll also die Property "appWindow" der Klasse "SimpleNoticeController" auf die Rückgabe der Methode "getAppWindow" der Bean "uiController" setzen, welche von Typ JFrame ist.

Spring gibt mir nun folgende Meldung aus:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.swing.JFrame] is defined: Unsatisfied dependency of type [class javax.swing.JFrame]: expected at least 1 matching bean

Was für eine "matching bean" erwartet er denn da? Habe ich in meiner XML etwas falsch gemacht, oder das Prinzip generell falsch verstanden?

Über Deine Hilfe würde ich mich sehr freuen

Danke!
 
Zuletzt bearbeitet von einem Moderator:
Strange, kommt da noch ein Beanname mit? Welche Bean will er denn erstellen? Der Setter von deinem SimpleNoticeController muss einen Parameter aufnehmen vom Rückgabetyp von getAppWindow auf deinem uiController. Passt das?

Gruß
Ollie
 
Oh ich glaubs nicht, Schande über mich - bei der ganzen Diskussion um XML oder Annotaions in dem anderen Thread, den wir führen, habe ich doch tatsächlich im Code noch ein "@Resource" an dem "appWindow" Feld gehabt, und natürlich gibt es die Bean "appWindow" nicht, genau das sagt mir Spring hier.

Tut mir echt leid, und danke nochmal, nun klappt es :)
 

Neue Beiträge

Zurück