7

我想在春天做以下事情:

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

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

4

3 回答 3

7

我的理解:

  1. 你有一个 bean (bean1) 有一个名为“foo”的属性
  2. 您有另一个具有名为“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"/>
于 2008-09-27T02:39:28.870 回答
5

您需要使用PropertyPathFactoryBean

    <bean id="bean2" 依赖于="bean1">
        <属性名称="propName">
            <bean class="org.springframework.beans.factory.config.PropertyPathFactoryBean">
                <property name="targetBeanName" value="bean1"/>
                <property name="propertyPath" value="foo"/>
            </豆>
        </属性>
    </豆>
于 2008-09-27T02:30:40.563 回答
-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应该会有所帮助。

于 2008-09-27T02:15:37.447 回答