您的位置:首页 > 编程语言 > Java开发

[JAVA][Spring]Spring3 ref和idref之间的区别

2018-01-15 14:54 441 查看


ref和idref之间的区别

在Spring中,idref属性和ref属性都可以用在constructor-arg元素和property元素中完成注入,那么它之间有什么区别呢?

考虑如下一段配置:

[html] view
plain copy

<bean id="bea" class="java.lang.String">  

    <constructor-arg index="0"><value>testString</value></constructor-arg>  

</bean>

  

<bean id="beanID" class="com.zyh.spring3.hello.HelloWorld">  

<!--通过idref注入bean bea-->

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

 

<!--通过ref注入bean
bea-->

    <property name="id">  

        <ref local="bea" />  

    </property>  

    <property name="age" value="25"></property>  

</bean>  

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

[html] view
plain copy

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

其实等同于

[html] view
plain copy

<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这个字符串。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: