[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这个字符串。
相关文章推荐
- [JAVA][Spring]Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
- [JAVA][Spring]Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
- Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
- Spring中Bean的命名问题及ref和idref之间的区别
- Spring中Bean的命名问题及ref和idref之间的区别
- Spring中Bean的命名问题及ref和idref之间的区别
- Spring中Bean的命名问题及ref和idref之间的区别
- Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
- Spring中idref与ref的区别
- spring idref和ref的区别
- spring idref和ref的区别
- spring idref和ref的区别
- Spring中id和idref属性的区别
- [JAVA][Spring]Spring1Bean的命名(id和name区别)
- Spring Bean中idref和ref区别
- Spring idref标签和ref的区别
- 7 -- Spring的基本用法 -- 8... 抽象Bean与子Bean;Bean继承与Java继承的区别;容器中的工厂Bean;获得Bean本身的id;强制初始化Bean
- spring中id/name,ref/idref的区别
- spring中的idref和ref的区别
- 第2章 Java编程基础——FAQ2.14 变量之间传值时可分为值传递和引用传递, 那么它们有何区别?