依赖注入中的<idref/>,Spring文档中是这样说的:是一种简单的错误验证方式,将容器中的其它Bean id(只是字符串值,不是引用)传递给<constractor-arg/>或者<property/>。
<bean id="theTargetBean" class="..."/>
<bean id="theClientBean" class="...">
<property name="targetName">
<idref bean="theTargetBean" />
</property>
</bean>运行时,上面的定义和下边这段是一样的,两者的区别是:上方将进行校验,而下方不会。
<bean id="theTargetBean" class="..." />
<bean id="client" class="...">
<property name="targetName" value="theTargetBean" />
</bean>当按照如上进行练习时,总会出现报错,提示不能将String类型转换为对应的ModelOne类型,无法完成ModelIdRef对象的初始化。当时的对象定义如下:
public class ModelIdRef {
private ModelOne one;
private ModelTwo two;
public ModelTwo getTwo() {
return two;
}
public void setTwo(ModelTwo two) {
this.two = two;
}
public ModelOne getOne() {
return one;
}
public void setOne(ModelOne one) {
this.one = one;
}
}xml中的定义如下:
<bean id="oneModel" class="com.test.date0907.model.ModelOne">
<constructor-arg name="id" value="123" type="int" />
<constructor-arg name="age" value="99" type="int" />
</bean>
<bean id="idrefModel" class="com.test.date0907.model.ModelIdRef">
<property name="id">
<idref bean="oneModel" />
</property>
<property name="two" ref="twoModel" />
</bean>后来将类ModelIdRef中的one类型从ModelOne改成了String类型,就能正常运行了,但<idref/>如何提供校验功能还不清楚;在类ModelIdRef中,如果要想使用ModelOne的对象,还要代码从id得到对象吗?还不如直接使用<ref/>。
如果哪位同学知道,请告知,谢谢!
参考文档:
1、http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-value-element
2、http://www.cnblogs.com/linjiqin/archive/2013/11/10/3416891.html
本文探讨了Spring框架中ID引用与Bean注入的区别,重点解释了ID引用是如何在运行时验证Bean的存在性,并提供了实例代码演示,同时对比了ID引用与简单值注入的异同。此外,还讨论了在特定场景下使用ID引用而非简单值注入的原因及注意事项。

1366

被折叠的 条评论
为什么被折叠?



