你如何在spring xml配置文件中访问bean的属性?

low*_*llk 7 spring

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

<beans>
    ...
    <bean id="bean1" ... />
    <bean id="bean2">
        <property name="propName" value="bean1.foo" />
...
Run Code Online (Sandbox Code Playgroud)

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

Pab*_*dez 6

我的理解:

  1. 你有一个bean(bean1),其属性名为"foo"
  2. 你有另一个bean(bean2),它有一个名为"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>
Run Code Online (Sandbox Code Playgroud)

这样做,你的bean2没有像你的例子那样耦合到bean1.您可以更改bean1和bean2而不会相互影响.

如果你真的需要做你建议的注射,你可以使用:

<util:property-path id="propName" path="bean1.foo"/>
Run Code Online (Sandbox Code Playgroud)


Bri*_*ews 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>