如何在Spring的xml配置文件中读取bean的属性?

7

我希望在Spring中实现以下功能:

<beans>
    ...
    <bean id="bean1" ... />
    <bean id="bean2">
        <property name="propName" value="bean1.foo" />
...

我认为这个操作将访问bean1的getFoo()方法并调用bean2的setPropName()方法,但是这似乎不起作用。
3个回答

7

我的理解:

  1. 您有一个名为"bean1"的Bean,其中有一个属性叫做"foo"
  2. 您有另一个名为"bean2"的Bean,其中也有一个名为"propName"的属性,这个属性也必须与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"/>

5

您需要使用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名称和属性路径。<bean id="bean1.foo" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"> - flicken

-2

我认为由于时间问题,您必须注入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 应该会很有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接