`

spring配置文件中Bean中的id和name的区别

阅读更多

在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")获得,以此类推。   
  
  [小结]   
  当然,这些都是奇技淫巧,不足以去实践,通过id指定唯一名称才是阳光大道,其他仅作为一笑而过的见闻罢了。    

分享到:
评论
2 楼 392807718 2012-04-07  
不错,值得学习!
1 楼 wayinit 2010-05-28  
不错 挺细心的 谢谢了

相关推荐

    spring applicationContext 配置文件

    &lt;description&gt;Spring公共配置文件 &lt;!-- mes 的數據庫 --&gt; &lt;bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"&gt; &lt;property name="driverClass" value="oracle....

    第五讲spring配置文件.rar

    配置文件详解 alias:为bean设置别名;可以设置多个别名 id是bean的标识符,要唯一。如果没有配置id,name是默认标识符,如果配置了id,又配置了name,那么name是别名, name可以设置多个别名,分隔符可以是空格 ...

    Spring2.5的国际化配置

    &lt;bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"&gt; &lt;property name="basename" value="message-info" /&gt; &lt;property name="useCodeAsDefaultMessage" value=...

    整合struts2和spring源代码(可以直接在tomcat中运行)

    当创建一个对象的时候,它会用Struts2配置文件中的class属性去和Spring配置文件中的id属性进行关联,如果能找到,则由Spring创建,否则由Struts 2框架自身创建,然后由Spring来装配。Spring插件具体有如下几个作用:...

    JSP Spring配置文件中传值的实例详解

    JSP Spring配置文件中传值的实例详解 通过spring提供方法,在配置文件中取传值  调用get方法   targetObject :指定调用的对象  propertyPath:指定调用那个getter方法  例1: public class Test1 { ...

    spring五种事务配置demo

    Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。 DataSource、TransactionManager这两部分只是会...

    Spring-IOC手动模拟实现-利用dom4解析xml文件

    通过dom4j解析配置文件,得到list集合(存放Bean标签的id和class属性) * 3.通过反射实例化得到对应的实例化对象,放置在map中(map是键值对,可根据id获取值)(遍历list获取对应的class属性,利用class。formName...

    Spring3中配置DBCP,C3P0,Proxool,Bonecp数据源

    在Spring3中配置数据源,包括DBCP,C3P0,Proxool,Bonecp主要的数据源,里面包含这些数据源的jar文件和依赖文件及配置文件。。 如Bonecp目前听说是最快的数据源,速度是传统的c3p0的25倍, bonecp.properties文件: ...

    Spring 自定义注解注入properties文件的值jar包

    在xml配置文件中,这样加载properties文件 &lt;bean id="propertyConfigurer" class="com.better517na.propertiesComponent.business.ExtendedPropertyPlaceholderConfigurer"&gt; &lt;property name="locations"&gt; ...

    Spring MVC 入门实例

    上面, 我们在 web.xml 文件中告诉 ContextLoaderListener, 我们还有另外两个配置文件 /WEB-INF/database.xml 和 /WEB-INF/applicationContext.xml. applicationContext.xml: 1 2 &lt;!DOCTYPE beans PUBLIC "-//...

    Spring AOP配置源码

    @Component("userService")等价于在spring配置文件中定义一个&lt;bean id="userService"/&gt; @Resource(name="userDAO")将userDA注入进来 写一个拦截器的类 package com.spring.aop; import org.springframework....

    Spring入门笔记.md

    ## Spring入门学习 首先认识下Spring的结构...&lt;bean id="helloBean" class="mybatis.study.start.bean.HelloWorld"&gt; &lt;property name="name" value="Yiibai" /&gt; &lt;/bean&gt; ``` list Map,provincecitymysqq

    ssh(structs,spring,hibernate)框架中的上传下载

     由于Spring通过代理Hibernate完成数据层的操作,所以原Hibernate的配置文件hibernate.cfg.xml的信息也转移到Spring的配置文件中:  代码 4 Spring中有关Hibernate的配置信息 1. 2. !-- 数据源的配置 //--> 3. ...

    JAVA Spring框架实现登陆查询 完整搭建框架方法的word文档 包含mysql文件

    3 导入配置文件,将如下配置文件导入到src下面 3.1 修改generatorConfig.xml文件,这个是mybatis的逆向工程,修改数据库名,用户名,密码,对应的包名,对应的项目。如图 3.2 修改jdbc.properits文件, 3.3 log...

    Spring入门.docx

    (1)DI注入属性:name为set方法去掉set之后首字母小写,ref为bean的id,需要有set方法,Spring会自动调用进行注入 (2)BeanFactory与ApplicationContext: ApplicationContext内部封装了BeanFactory,功能更加强大...

    spring aop 实现源代码--xml and annotation(带lib包)

    在Spring1.2或之前的版本中,实现AOP的传统方式就是通过实现Spring的AOP API来定义Advice,并设置代理对象。Spring根据Adivce加入到业务流程的时机的不同,提供了四种不同的Advice:Before Advice、After Advice、...

    Spring的学习笔记

    二、 建立spring的配置文件 8 三、 引入spring的jar包 8 四、 测试代码: 8 五、 注意接口的使用: 8 第五课:IOC(DI)配置及应用 9 一、 什么是IOC、DI 9 二、 编辑xml文件时,没有提示 9 三、 注入类型(Injecting ...

    spring基础

    而采用独立的 XML 配置文件,程序员在编写一个功能时,往往需要在程序文件和配置文件中不停切换,这种思维上的不连贯会降低开发效率。 因此在很多情况下,注释配置比 XML 配置更受欢迎,注释配置有进一步流行的趋势...

    springmybatis

    1. 从配置文件(通常是XML配置文件中)得到 sessionfactory. 2. 由sessionfactory 产生 session 3. 在session 中完成对数据的增删改查和事务提交等. 4. 在用完之后关闭session 。 5. 在java 对象和 数据库之间有做...

Global site tag (gtag.js) - Google Analytics