spring bean中ref与idref俩个属性的区别?

今天学了spring 对ref与idref的区别 只存在于 一个不去做验证 一个有验证功能

考虑如下一段配置代码:

<bean id="bea" class="java.lang.String">
	<constructor-arg index="0" value="12"></constructor-arg>
</bean>
<bean id="beanID" class="com.zyh.spring3.hello.HelloWorld">
	<constructor-arg name="name"><idref bean="bea" /></constructor-arg>
	<property name="id">
		<ref local="bea" />
	</property>
	<property name="age" value="25"></property>
</bean>

其实,idref注入的是目标bean的id而不是目标bean的实例,同时使用idref容器在部署的时候还会验证这个名称的bean是否真实存在
其实idref就跟value一样,只是将某个字符串注入到属性或者构造函数中,只不过注入的是某个Bean定义的id属性值。
所以上面的代码中

<constructor-arg name="name"><idref bean="bea" /></constructor-arg>

其实等同于

<constructor-arg name="name"><value>bea</value></constructor-arg>

而ref则是完全地不同,ref元素是将目标Bean定义的实例注入到属性或构造函数中,ref元素有三个属性,区别如下:

1、local 只能指定与当前配置的Bean在同一个配置文件中的Bean定义的名称;
2、parent 只能指定位于当前容器的父容器中定义的对象引用;
3、bean 基本上通吃,即包括以上两种情况都可以,所以,通吃情况下,直接使用bean来指定对象引用就可以了。
所以,上面那段配置代码中,beanID这个Bean中构造函数的参数name注入的只是“bea”这个字符串;而其id属性注入的则是testString这个字符串。

区别:

ref:注入的是bean的实例 
idref:注入的是string。

猜你喜欢

转载自blog.csdn.net/qqqnzhky/article/details/82748193
今日推荐