我希望在Spring中实现以下功能:
<beans>
...
<bean id="bean1" ... />
<bean id="bean2">
<property name="propName" value="bean1.foo" />
...
我认为这个操作将访问bean1的getFoo()方法并调用bean2的setPropName()方法,但是这似乎不起作用。
我希望在Spring中实现以下功能:
<beans>
...
<bean id="bean1" ... />
<bean id="bean2">
<property name="propName" value="bean1.foo" />
...
我的理解:
为什么不这样做:
<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"> <property name="propName"> <bean class="org.springframework.beans.factory.config.PropertyPathFactoryBean"> <property name="targetBeanName" value="bean1"/> <property name="propertyPath" value="foo"/> </bean> </property> </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 应该会很有帮助。