关于Spring中的<idref/>

本文探讨了Spring框架中ID引用与Bean注入的区别,重点解释了ID引用是如何在运行时验证Bean的存在性,并提供了实例代码演示,同时对比了ID引用与简单值注入的异同。此外,还讨论了在特定场景下使用ID引用而非简单值注入的原因及注意事项。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

依赖注入中的<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

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值