Wie greifen Sie auf eine Eigenschaft einer Bean in einer Feder XML-Konfigurationsdatei zu lesen?
-
02-07-2019 - |
Frage
Ich möchte so etwas wie die folgenden im Frühjahr tun:
<beans>
...
<bean id="bean1" ... />
<bean id="bean2">
<property name="propName" value="bean1.foo" />
...
Ich würde denken, dass dies den getFoo () -Methode von Bean1 zugreifen würde und die setPropName () -Methode von Bean2 nennen, aber das scheint nicht zu funktionieren.
Lösung
Was ich verstanden:
- Sie haben eine Bohne (Bean1) mit einem Eigenschaft namens "foo"
- Sie haben eine andere Bohne (Bean2) mit einem Eigentum „propName“ genannt, weichen auch hat die gleich „foo“ hat, dass in Bean1.
, warum dies nicht zu tun:
<beans>
...
<bean id="foo" class="foopackage.foo"/>
<bean id="bean1" class="foopackage.bean1">
<property name="foo" ref="foo"/>
</bean>
<bean id="bean2" class="foopackage.bean2">
<property name="propName" ref="foo"/>
</bean>
....
</beans>
Dadurch, Ihr Bean2 ist nicht gekoppelt wie in Ihrem Beispiel Bean1. Sie können Bean1 und Bean2 ohne einander ändern zu beeinflussen.
Wenn Sie wirklich müssen die Injektion Sie vorgeschlagen tun, können Sie:
<util:property-path id="propName" path="bean1.foo"/>
Andere Tipps
Sie müssen verwenden
Ich glaube, Sie haben Bean1 zu injizieren, dann bekommen Sie können einen Zeiger Bean erstellen und konfigurieren. Common BeanUtils sollte hilfreich sein. foo
manuell wegen eines Timing-Problem. Wann wird der Rahmen den Wert der Ziel Bean lösen? class SpringRef {
private String targetProperty;
private Object targetBean;
//getters/setters
public Object getValue() {
//resolve the value of the targetProperty on targetBean.
}
}