Spring 中bean与id 即默认值

转载 2016年08月30日 10:49:49
在BeanFactory的配置中,<bean>是我们最常见的配置项,它有两个最常见的属性,即id和name,最近研究了一下,发现这两个属性还挺好玩的,特整理出来和大家一起分享。
1.id属性命名必须满足XML的命名规范,因为id其实是XML中就做了限定的。总结起来就相当于一个Java变量的命名:不能以数字,符号打头,不能有空格,如123,?ad,"ab "等都是不规范的,Spring在初始化时就会报错,诸如:


代码
org.xml.sax.SAXParseException: Attribute value "?ab" of type ID must be a name.


2.name属性则没有这些限定,你可以使用几乎任何的名称,如?ab,123等,但不能带空格,如"a b"," abc",,这时,虽然初始化时不会报错,但在getBean()则会报出诸如以下的错误:


代码
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'a b' is defined


3.配置文件中不允许出现两个id相同的<bean>,否则在初始化时即会报错,如:


代码
org.xml.sax.SAXParseException: Attribute value "aa" of type ID must be unique within the document.

4.但配置文件中允许出现两个name相同的<bean>,在用getBean()返回实例时,后面一个Bean被返回,应该是前面那 个<bean>被后面同名的 <bean>覆盖了。有鉴于此,为了避免不经意的同名覆盖的现象,尽量用id属性而不要用name属性。

5.name属性可以用,隔开指定多个名字,如<bean name="b1,b2,b3">,相当于多个别名,这时通过getBean("a1") getBean("a2") getBean("a3")返回的都是同一个实例(假设是singleton的情况)

6.如果id和name都没有指定,则用类全名作为name,如<bean class="com.stamen.BeanLifeCycleImpl">,则你可以通过
getBean("com.stamen.BeanLifeCycleImpl")返回该实例。

7.如果存在多个id和name都没有指定,且实例类都一样的<bean>,如:


代码
<bean class="com.stamen.BeanLifeCycleImpl"/>
<bean class="com.stamen.BeanLifeCycleImpl"/>
<bean class="com.stamen.BeanLifeCycleImpl"/>

则第一个bean通过getBean("com.stamen.BeanLifeCycleImpl")获得,
第二个bean通过getBean("com.stamen.BeanLifeCycleImpl#1")获得,

第三个bean通过getBean("com.stamen.BeanLifeCycleImpl#2")获得,以此类推。


转自 : http://wxfstwxf.iteye.com/blog/1470485

spring 配置时 bean id 与bean name 的区别

简单的说:id用来标识bean,是唯一的,且只有一个;name定义的是bean的alias,可以有多个,并可能与其他的bean重名。 详细的说: id是唯一标识bean.不能用特殊字符:×#@ ,...
  • dys1990
  • dys1990
  • 2011年09月07日 00:59
  • 24258

[JAVA][Spring]Spring中Bean的命名问题(id和name区别)及ref和idref之间的区别

Spring中Bean的命名 1、每个Bean可以有一个id属性,并可以根据该id在IoC容器中查找该Bean,该id属性值必须在IoC容器中唯一; 2、可以不指定id属性,只指定全限定类...
  • szwangdf
  • szwangdf
  • 2015年01月07日 10:26
  • 8148

Spring配置中<bean>的id和name属性区分

ID属性在spring容器管理的Bean中,必须仅且只有一个无重复的ID。手动指定ID属性一般情况下,配置一个bean时,需要指定它的ID属性作为bean的名称。Q:如果在spring环境下,如果出现...
  • xinluke
  • xinluke
  • 2016年09月28日 14:53
  • 3679

spring中的bean默认是单例模式

singleton---单例模式 单例模式,在spring 中其实是scope(作用范围)参数的缺省设定值 每个bean定义只生成一个对象实例,每次getBean请求获得的都是此实例 ...
  • ZuiZaiYingZeJie
  • ZuiZaiYingZeJie
  • 2014年04月08日 22:42
  • 10892

Spring默认的Bean的scope

scope属性可以理解成bean的生命周期 1、默认的值是singleton(単例),spring容器只会创建一个相应的bean实例,所有的对该bean的请求,spring容器都只返回这个实例。 ...
  • bigtree_3721
  • bigtree_3721
  • 2016年03月09日 16:56
  • 3458

Spring中bean的scope详解

如何使用spring的作用域: 这里的scope就是用来配置spring bean的作用域,它标识bean的作用域。 在spring2.0之前bean只有2种作用域即:singleton(单例...
  • fhx007
  • fhx007
  • 2011年11月27日 14:57
  • 27790

Spring 管理Bean(获取Bean,初始化bean事件,自动匹配ByName······等)

1.实例化spring容器 和 从容器获取Bean对象 实例化Spring容器常用的两种方式: 方法一: 在类路径下寻找配置文件来实例化容器 [推荐使用] Applicatio...
  • sd0902
  • sd0902
  • 2012年12月25日 00:11
  • 11199

Spring 中bean与id 即默认值

在BeanFactory的配置中,是我们最常见的配置项,它有两个最常见的属性,即id和name,最近研究了一下,发现这两个属性还挺好玩的,特整理出来和大家一起分享。 1.id属性命名必须满足XML的...
  • u011679955
  • u011679955
  • 2016年10月12日 18:20
  • 472

spring bean属性及子元素使用总结

spring框架中主要有四种标签bean、alias、import、beans,其中bean标签是其他标签的基础,此文主要对bean标签的属性及其子元素进行讨论,废话不多,请往下看。 一、bean标...
  • qq_21033663
  • qq_21033663
  • 2016年08月03日 00:00
  • 2715

Spring配置中<bean>的id和name属性区分

ID属性 在spring容器管理的Bean中,必须仅且只有一个无重复的ID。 手动指定ID属性 一般情况下,配置一个bean时,需要指定它的ID属性作为bean的名称。 id="h...
  • qq_1017097573
  • qq_1017097573
  • 2017年04月01日 00:17
  • 974
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring 中bean与id 即默认值
举报原因:
原因补充:

(最多只允许输入30个字)