2011-05-01 69 views
1

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

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

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

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

+0

你能对你的意思是什么ID2扩大不会自动创建 - 你看到null作为第一个参数的Class1的构造通过呢? – 2011-05-01 23:30:02

+0

在本例中,会自动创建'id2' * *。如果这是一个精简的样本,你已经省略了一些重要的东西。 – skaffman 2011-05-02 08:58:59

回答

5

这应该工作。 Spring根据布线指出依赖关系,并按要求的顺序创建事物。

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

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

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

如果这个答案没有帮助,请向我们提供了FULL堆栈跟踪,并从实际布线文件的有关摘录。


我的Spring 3.0 documentation的解读是,一个depends-on属性应该是必要的OP的例子。 ref应该足以告诉Spring有一个依赖关系,并使它按照正确的顺序实例化bean。

+0

+1为更好的答案,虽然我们不知道什么版本的Spring正在使用。 – 2011-05-02 07:47:13

+0

事实证明,class2被创建,其他的东西阻止我先看到正确的结果。谢谢斯蒂芬。 – user705414 2011-05-02 11:37:39

3

这可以通过显式地指定豆“ID1”来实现由依靠“ID2”:

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

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

这应该没有区别。从'id1'到'id2'已经有明确的依赖关系,不需要添加另一个。 – skaffman 2011-05-02 08:58:08

1

您还可以使用内部bean工作,如果豆ID2仅作为构造精氨酸的ID1。

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

(编辑错字)

相关问题