为什么以下不会自动创建引用对象

时间:2011-05-01 23:19:53

标签: java spring

使用Spring

<bean id="id2" class="class2">
</bean>

<bean id="id1" class="class1">
    <constructor-arg index="0" ref="id2" />
</bean>

如果使用getbean(“id1”),我发现不会自动创建id2。如何在创建id1之前强制创建id2?

3 个答案:

答案 0 :(得分:5)

那应该有用。 Spring从布线中找出依赖关系,并按所需顺序创建事物。

如果没有,请检查类名是否正确,class1class2是否具有适当的构造函数,以及可能阻止实例化两个bean的其他内容。另外,检查您是否未指定具有构造函数参数依赖性循环的内容; e.g。

<bean id="id2" class="class2">
    <constructor-arg index="0" ref="id1" /> </bean>

<bean id="id1" class="class1">
    <constructor-arg index="0" ref="id2" /> </bean>

如果这个答案没有帮助,请向我们提供完整的堆栈跟踪,以及REAL布线文件的相关摘录。


我对Spring 3.0 documentation的阅读是OP的示例中不应该depends-on应足以告诉Spring存在依赖关系,并使其以正确的顺序实例化bean。

答案 1 :(得分:3)

这可以通过以下方式明确指定bean“id1​​”依赖于“id2”来完成:

<bean id="id2" class="class2">
</bean>

<bean id="id1" class="class1" depends-on="id2">
    <constructor-arg index="0" ref="id2" />
</bean>

答案 2 :(得分:1)

如果bean id2仅用作id1的构造函数arg,你也可以使用内部bean。

  <bean id="id1" class="class1">
      <constructor-arg>
        <bean class="class2">
        </bean>
      </constructor-arg>
    </bean>

(编辑错字)