我想要做的事就像春天如下:如何獲取bean的屬性以便在spring xml配置文件中讀取?
<beans>
...
<bean id="bean1" ... />
<bean id="bean2">
<property name="propName" value="bean1.foo" />
...
我會認爲這將訪問bean1的的getFoo()方法和調用bean2的setPropName()方法,但是這似乎並沒有上班。
我想要做的事就像春天如下:如何獲取bean的屬性以便在spring xml配置文件中讀取?
<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"/>
我想你必須注入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應該是有幫助的。
您需要使用PropertyPathFactoryBean:
<bean id="bean2" depends-on="bean1"> <property name="propName"> <bean class="org.springframework.beans.factory.config.PropertyPathFactoryBean"> <property name="targetBeanName" value="bean1"/> <property name="propertyPath" value="foo"/> </bean> </property> </bean>
替代的語法使用「id」屬性設置目標bean的名字和屬性路徑。 –
flicken
2008-09-27 04:33:12