【问题标题】:Compound beans in Spring?春季复合豆?
【发布时间】:2012-11-02 15:21:50
【问题描述】:

假设我有自己的 bean,其中包含另一个硬编码的 bean。

如何通过 Spring 配置加入这个?

第一种方法是使用工厂方法:

<bean id="bean1" class="myClass1"/>
<bean id="bean1.member" factory-bean="bean1" factory-method="getMember"/>
<bean id="bean2" class="myClass2">
   <property name="collaborator" ref="bean1.member"/>
</bean>

另一种方法是使用EL:

<bean id="bean1" class="myClass1"/>
<bean id="bean2" class="myClass2">
   <property name="collaborator" value="#{bean1.member}"/>
</bean>

在后一种情况下,Spring 没有实现依赖。无论如何,Eclipse 中的 Bean Graph 显示的是不相关的 bean。

有没有更好的方法?也许我可以用MyClass1 实现一些接口,以便将其视为容器或上下文?

【问题讨论】:

    标签: java spring javabeans ioc-container


    【解决方案1】:

    您应该为bean1.member 创建一个单独的bean 并将其注入bean1

    <bean id="bean3previouslyMember" class="myCompoundBean"/>
    
    <bean id="bean1" class="myClass1">
       <property name="member" ref="bean3previouslyMember"/>
    </bean>
    <bean id="bean2" class="myClass2">
       <property name="collaborator" ref="bean3previouslyMember"/>
    </bean>
    

    除非 myClass1 不可修改且没有 setter,否则我们通常会这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多