使用Spring为什么以下不会自动创建的引用对象
<bean id="id2" class="class2">
</bean>
<bean id="id1" class="class1">
<constructor-arg index="0" ref="id2" />
</bean>
如果使用的getBean(“ID1”),我发现,ID2不会自动创建。如何强制在创建id1之前创建id2?
使用Spring为什么以下不会自动创建的引用对象
<bean id="id2" class="class2">
</bean>
<bean id="id1" class="class1">
<constructor-arg index="0" ref="id2" />
</bean>
如果使用的getBean(“ID1”),我发现,ID2不会自动创建。如何强制在创建id1之前创建id2?
这应该工作。 Spring根据布线指出依赖关系,并按要求的顺序创建事物。
如果不是,请检查类名是否正确,class1
和class2
是否有适当的构造函数以及其他可能会阻止实例化这两个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。
+1为更好的答案,虽然我们不知道什么版本的Spring正在使用。 – 2011-05-02 07:47:13
事实证明,class2被创建,其他的东西阻止我先看到正确的结果。谢谢斯蒂芬。 – user705414 2011-05-02 11:37:39
这可以通过显式地指定豆“ID1”来实现由依靠“ID2”:
<bean id="id2" class="class2">
</bean>
<bean id="id1" class="class1" depends-on="id2">
<constructor-arg index="0" ref="id2" />
</bean>
这应该没有区别。从'id1'到'id2'已经有明确的依赖关系,不需要添加另一个。 – skaffman 2011-05-02 08:58:08
您还可以使用内部bean工作,如果豆ID2仅作为构造精氨酸的ID1。
<bean id="id1" class="class1">
<constructor-arg>
<bean class="class2">
</bean>
</constructor-arg>
</bean>
(编辑错字)
你能对你的意思是什么ID2扩大不会自动创建 - 你看到null作为第一个参数的Class1的构造通过呢? – 2011-05-01 23:30:02
在本例中,会自动创建'id2' * *。如果这是一个精简的样本,你已经省略了一些重要的东西。 – skaffman 2011-05-02 08:58:59