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

2022-09-01 13:46:13

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

class A {
   void setList(List list);
}

class B {
   List getList();
}

我希望Spring实例化这两个类,并调用A的setList方法,传入调用B的getList方法的结果。弹簧配置可能如下所示:

<bean id="b" class="B"/>
<bean id"a" class="A">
    <property name="list" ref="b" ref-property="list"/>
</bean>

唉,这个虚构的XML不起作用。

为什么不直接将B注入A?因为我不想引入额外的依赖关系。A 只是从属列表,而不是 B。


答案 1

除了@Kevin的答案之外,如果您使用的是spring 3.0,还可以使用新的spring表达式语言来执行此操作

<bean id="a" class="A">
    <property name="list"
        value="#{b.list}"/>
</bean>

spring 3.0 文档


答案 2

有几种方法。这是一个:

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

另请参阅 <util:property-path/> 元素


推荐