如何访问bean的属性以便在spring xml配置文件中读取?

时间:2008-09-27 01:55:23

标签: spring

我想在春天做类似的事情:

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

我认为这会访问bean1的getFoo()方法并调用bean2的setPropName()方法,但这似乎不起作用。

3 个答案:

答案 0 :(得分:6)

我的理解:

  1. 你有一个bean(bean1) 属于“foo”的财产
  2. 你有另一个bean(bean2) 属性名为“propName”,也是 必须有相同的“foo” bean1。
  3. 为什么不这样做:

    <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"/>
    

答案 1 :(得分: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>

答案 2 :(得分:-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应该会有所帮助。