(转)Spring中Bean的命名问题(id和name区别)及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;
如果该Bean找不到则抛异常:NoSuchBeanDefinitionException
如果该类型的Bean有多个则抛异常:NoUniqueBeanDefinitionException
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 设计并实现 RESTful Web Services
Spring-3.2.4 + Quartz-2.2.0集成实例
Spring 3.x 企业应用开发实战 PDF完整高清扫描版+源代码
(转)Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别的更多相关文章
- Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别
Spring中Bean的命名 1.每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一: 2.可以不指定id属性,只指定全限定类名,如: & ...
- Spring中Bean的命名问题及ref和idref之间的区别
一直在用Spring,其实对其了解甚少,刚去了解了一下Spring中Bean的命名问题以及ref和idref之间的区别,略作记录,以备后查. Spring中Bean的命名 1.每个Bean可以有一个i ...
- Spring中Bean命名源码分析
Spring中Bean命名源码分析 一.案例代码 首先是demo的整体结构 其次是各个部分的代码,代码本身比较简单,不是我们关注的重点 配置类 /** * @Author Helius * @Crea ...
- Spring中bean的注入方式
首先,要学习Spring中的Bean的注入方式,就要先了解什么是依赖注入.依赖注入是指:让调用类对某一接口的实现类的实现类的依赖关系由第三方注入,以此来消除调用类对某一接口实现类的依赖. Spring ...
- Spring中Bean的作用域、生命周期
Bean的作用域.生命周期 Bean的作用域 Spring 3中为Bean定义了5中作用域,分别为singleton(单例).protot ...
- Spring中Bean的实例化
Spring中Bean的实例化 在介绍Bean的三种实例化的方式之前,我们首先需要介绍一下什么是Bean,以及Bean的配置方式. 如果 ...
- Spring中Bean的配置:基于XML文件的方式
Bean的配置一共有两种方式:一种是基于XML文件的方式,另一种是基于注解的方式.本文主要介绍基于XML文件的方式 <bean id="helloWorld" class=& ...
- JAVA面试题:Spring中bean的生命周期
Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一 ...
- 深入理解Spring中bean的生命周期
[Spring中bean的生命周期] bean的生命周期 1.以ApplocationContext上下文单例模式装配bean为例,深入探讨bean的生命周期: (1).生命周期图: (2).具体事例 ...
随机推荐
- javascript QUnit 单元测试
<!doctype html> <html> <head lang="zh-CN" dir="ltr"> <meta ...
- 浅析CSS负边距
本文主要讨论两点,1.左右负边距对元素宽度的影响:2.负边距对浮动元素的影响. 在讨论这两点前,首先要理解盒模型.文档流. 盒模型,见下图,简单明了. 文档流,将窗体自上而下分成一行行, 并在每行中按 ...
- Win API 内存整理
记得我的笔记本上曾经安装了一款名为内存整理大师的软件,当时觉得挺好用而且挺NB的,就是导致开机启动有点慢. 当时我就在想,内存整理是怎么实现的?不过那是水平实在是不怎么样,估计连windows程序的消 ...
- Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一)
相关的maven的 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...
- java日期格式的转换
1.转换指定格式的日期 /** * 日期格式转换 * @throws ParseException */ public String dateformat(String date,String tab ...
- nginx fastcgi php-fpm的关系梳理
CGI(Common Gateway Interface)CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具 ...
- 各个 Maven仓库 镜像(包括国内)
本来之前用的OSC的Maven库,不过最近客户这边换了联通的网络之后,OSC的库就完全连不上了,不知道是不是因为OSC用的是天翼赞助的网络的原因,所以收集了一些其他的镜像库 首推当然还是OSC(不过联 ...
- laravel5 centos6.4下的配置体验
1. 安装lmnp环境: nginx version: nginx/1.6.0. php 5.5.7 . centos6.42. laravel-v5.1.4 一键安装包,在使用composer 安装 ...
- marginCollapse之兄弟关系的DIV
废话不说,直接上图 基本代码如下: 效果图如下: 给两个div分别加marginBottom和marginTop看一下效果 实际效果如下: 我们可以看出两个div之间的距离并不是50+50,而是只显示 ...
- 2015-10-09 Fri 晴 加快进度看书
最近老感觉每天不够用,每天7点起来,吃饭完了8点开始看书,不知道是我看书太慢了还是时间过得真的很快,不知不觉中午就到了.而这个时候我才看2章的内容,下午能多看3章内容.一本书也就一天的时候,而我现在还 ...