spring:通过读取另一个bean的属性来设置一个bean的属性?

Lan*_*uhn 28 java spring dependency-injection

是否可以通过读取另一个bean的属性来设置一个bean的属性?例如,假设我有:

class A {
   void setList(List list);
}

class B {
   List getList();
}
Run Code Online (Sandbox Code Playgroud)

我希望Spring实例化这两个类,并调用A的setList方法,传入调用B的getList方法的结果.Spring配置可能类似于:

<bean id="b" class="B"/>
<bean id"a" class="A">
    <property name="list" ref="b" ref-property="list"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

唉,这个组成的XML不起作用.

为什么不把B注入A?因为我不想引入额外的依赖.A只是依赖列表,而不是B.

Gar*_*vis 50

除了@ Kevin的答案,如果您使用的是Spring 3.0,可以使用新的spring表达式语言来完成

<bean id="a" class="A">
    <property name="list"
        value="#{b.list}"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

spring 3.0文档


Kev*_*vin 18

有几种方法.这是一个:

<bean id="b" class="B"/>
<bean id="a" class="A">
    <property name="list">
        <bean class="org.springframework.beans.factory.config.PropertyPathFactoryBean">
            <property name="targetObject" ref="b"/>
            <property name="propertyPath" value="list"/>
        </bean>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

另见<util:property-path/>元素