Spring中Bean的命名问题及ref和idref之间的区别
来源:互联网 发布:阿里云金牌服务商 编辑:程序博客网 时间:2024/05/17 08:26
一直在用Spring,其实对其了解甚少,刚去了解了一下Spring中Bean的命名问题以及ref和idref之间的区别,略作记录,以备后查。
Spring中Bean的命名
1、每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一;
2、可以不指定id属性,只指定全限定类名,如:
<bean class="com.zyh.spring3.hello.StaticBeanFactory"></bean>
此时需要通过接口getBean(Class<T> requiredType)来获取Bean;
3、如果不指定id,只指定name,那么name为Bean的标识符,并且需要在容器中唯一;
4、同时指定name和id,此时id为标识符,而name为Bean的别名,两者都可以找到目标Bean;
5、可以指定多个name,之间可以用分号(“;”)、空格(“ ”)或逗号(“,”)分隔开,如果没有指定id,那么第一个name为标识符,其余的为别名;若指定了id属性,则id为标识符,所有的name均为别名。如:
<bean name="alias1 alias2;alias3,alias4" id="hello1" class="com.zyh.spring3.hello.HelloWorld"><constructor-arg index="0" value="Rod"></constructor-arg></bean>此时,hello1为标识符,而alias1,alias2,alias3,alias4为别名,它们都可以作为Bean的键值;
6、可以使用<alias>标签指定别名,别名也必须在IoC容器中唯一,如:
<bean name="bean" class="com.zyh.spring3.hello.HelloWorld"/> <alias alias="alias1" name="bean"/> <alias alias="alias2" name="bean"/>
ref和idref之间的区别
在Spring中,idref属性和ref属性都可以用在constructor-arg元素和property元素中完成注入,那么它之间有什么区别呢?
考虑如下一段配置代码:
<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"><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这个字符串。
- Spring中Bean的命名问题及ref和idref之间的区别
- Spring中Bean的命名问题及ref和idref之间的区别
- [JAVA][Spring]Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
- [JAVA][Spring]Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
- Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
- Spring Bean中idref和ref区别
- Spring中idref与ref的区别
- spring中的idref和ref的区别
- spring idref和ref的区别
- spring idref和ref的区别
- Spring idref标签和ref的区别
- spring idref和ref的区别
- spring配置文件中ref 和idref标签
- Spring中id和idref属性的区别
- spring ref local="" 和 ref bean=""的区别
- Spring中的idref和ref
- Spring的ref bean和ref local
- Spring 配置文件 属性 ref bean和local的区别
- SQL 查询某属性分类数据和
- 用纯css实现的html5 logo标志
- SQL Server生成指定范围的随机数
- 拼音转换类
- 消息模式Toast.makeText用法
- Spring中Bean的命名问题及ref和idref之间的区别
- 用jquery实现仿蘑菇街导航固定顶部的效果
- 对象工具类
- iOS 6版本与之前版本差异总结
- Memcached-----memcached实现内存缓存
- JS取得当前系统时间并且格式化
- 从一个表里数据复制到另一个表里(结构一样)
- 文件压缩打包 批处理
- 西邮共享上网工具不正确使用的后果(如何在西邮免费上网)