博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring配置bean时id和name的相关讨论
阅读量:4072 次
发布时间:2019-05-25

本文共 1459 字,大约阅读时间需要 4 分钟。

http://www.iteye.com/topic/24525

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

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


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

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


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

 
Java代码  
  1. 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>,如: 

  
Java代码  
  1. <bean class="com.stamen.BeanLifeCycleImpl"/>  
  2.    <bean class="com.stamen.BeanLifeCycleImpl"/>  
  3.    <bean class="com.stamen.BeanLifeCycleImpl"/>  
   则第一个bean通过getBean("com.stamen.BeanLifeCycleImpl")获得, 

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

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

  

  
[小结]
 

    当然,这些都是奇技淫巧,不足以去实践,通过id指定唯一名称才是阳光大道,其他仅作为一笑而过的见闻罢了。 

转载地址:http://pzkni.baihongyu.com/

你可能感兴趣的文章
[AR]高通Vuforia Getting Started
查看>>
Unity ios、android、pc一键打包(一)
查看>>
欧几里得空间
查看>>
今天写shader流光效果,shader代码少了个括号,unity shader compiler卡死且不提示原因...
查看>>
Unity shader saturate
查看>>
_LightColor0将会是主要的directional light的颜色。
查看>>
Unity的Shader如何控制投影颜色
查看>>
Unity3d 下websocket的使用
查看>>
unity与android交互总结
查看>>
android studio 开发android app 真机调试
查看>>
两分钟彻底让你明白Android Activity生命周期(图文)!
查看>>
这几天用高通VUFORIA的体会
查看>>
ARGB_8888
查看>>
HoloLens的显示分辨率有多少?
查看>>
ThreadPool(线程池) in .Net
查看>>
为什么3D模型的网格由很多三角形来组成
查看>>
U3D OnDrawGizmos
查看>>
Unity Remote 5 使用
查看>>
Unity中的Path对应各平台中的Path
查看>>
GameObject.Find 使用技巧
查看>>