春に次のようなことをしたい:
<beans>
...
<bean id="bean1" ... />
<bean id="bean2">
<property name="propName" value="bean1.foo" />
...
これは bean1 の getFoo() メソッドにアクセスし、bean2 の setPropName() メソッドを呼び出すと思いますが、これは機能していないようです。
春に次のようなことをしたい:
<beans>
...
<bean id="bean1" ... />
<bean id="bean2">
<property name="propName" value="bean1.foo" />
...
これは bean1 の getFoo() メソッドにアクセスし、bean2 の setPropName() メソッドを呼び出すと思いますが、これは機能していないようです。
私が理解したこと:
なぜこれをしないのですか:
<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>
これを行うと、例のように bean2 が bean1 に結合されません。互いに影響を与えずに bean1 と bean2 を変更できます。
提案した注射を本当に行う必要がある場合は、次を使用できます。
<util:property-path id="propName" path="bean1.foo"/>
PropertyPathFactoryBeanを使用する必要があります。
<bean id="bean2" depends-on="bean1"> <プロパティ名="propName"> <bean class="org.springframework.beans.factory.config.PropertyPathFactoryBean"> <property name="targetBeanName" value="bean1"/> <property name="propertyPath" value="foo"/> </bean> </プロパティ> </bean>
bean1 を注入してからfoo
、タイミングの問題のために手動で取得する必要があると思います。フレームワークがターゲット Bean の値を解決するのはいつですか?
ポインター Bean を作成して構成できます。
class SpringRef {
private String targetProperty;
private Object targetBean;
//getters/setters
public Object getValue() {
//resolve the value of the targetProperty on targetBean.
}
}
Common-BeanUtilsが役立つはずです。