我们如何访问bean的属性以读取spring xml配置文件?
时间:2020-03-06 14:48:58 来源:igfitidea点击:
我想在春季做类似以下的事情:
<beans> ... <bean id="bean1" ... /> <bean id="bean2"> <property name="propName" value="bean1.foo" /> ...
我认为这将访问bean1的getFoo()方法并调用bean2的setPropName()方法,但这似乎不起作用。
解决方案
我认为我们必须注入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>
我的理解:
- 我们有一个具有名为" foo"的属性的bean(bean1)
- 我们还有另一个具有名为" propName"的属性的bean(bean2),它也必须具有与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"/>