我可以在Spring中引用嵌套bean吗?

时间:2011-04-12 13:56:45

标签: java spring

我想要一个类型为 com.a.A 的bean,它有几个可寻址的属性 com.a.B

<bean id="myCompound" class="com.a.A">
    <property name="first">
        <bean class="com.a.B"/> <!-- Anything else needed here? -->
    </property>
     <property name="second">
        <bean class="com.a.B"/> <!-- Anything else needed here? -->
    </property>

可寻址中,我的意思是,我希望能够从另一个bean中引用这些嵌套bean中的任何一个:

<bean id="myCollaborator" class="com.a.C">
    <property name="target" ref="myCompound.first"/>
</bean>

这个结构不起作用,在我看来Spring并没有解析&lt; ref&gt;中的复合属性。元素。是这样吗?有人可以想办法解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

如果我正确理解您的问题,那么Spring 3.0的EL支持可以提供您正在寻找的内容:

<bean id='one' class  = 'a.b.C.One' >
  <property name='property1' value ='43433' />
</bean>

<bean class = 'a.b.c.Two'>
 <property name = 'property2' value = "#{ one.property1 }"/>
</bean>

当然,在Java风格的配置中,这是微不足道的

@Configuration 
public class MyConfiguration {
    @Bean 
    public One one(){ 
     One o = new One();
     o.setProperty1(24324);
     return o;
    }

    @Bean 
    public Two two (){ 
     Two t =new Two();
     t.setProperty2( one().getProperty1());
     return t;
    }
}

答案 1 :(得分:0)

这是一个简单的解决方法。

<bean id="firstB" class="com.a.B"/>
<bean id="secondB" class="com.a.B"/>

<bean id="myCompound" class="com.a.A">
    <property name="first" ref="firstB"/>
    <property name="second" ref="secondB"/>
</bean>

<bean id="myCollaborator" class="com.a.C">
    <property name="target" ref="firstB"/>
</bean>