`

谈谈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指定唯一名称才是阳光大道,其他仅作为一笑而过的见闻罢了。
  
分享到:
评论
6 楼 di1984HIT 2014-10-23  
确实如你所说,不看代码根本不知道呢~
5 楼 xiaoych 2006-09-28  
《Spring专业开发指南》里面讲到这个事情。根据作者的意思,name是id的一个补充。
4 楼 duan0175 2006-09-28  
我也是,实际的开发中只用过id,class。
不过文章不错,项~~~~~~~~~~~~
3 楼 lszone 2006-09-18  
一般都用Id,不重名的,没用过name属性
2 楼 青雉 2006-09-18  
id跟java的变量一样。name限制的少些。不错。
1 楼 galaxystar 2006-09-18  
还不错!
补充一下,id与name也可以并存!

相关推荐

    车联网不要花拳绣腿.pdf

    车联网不要花拳绣腿.pdf

    00266 培训师--慧眼识珠--看穿培训师的花拳绣腿!.doc

    在当今的培训市场中,培训师的角色至关重要,他们不仅是培训产品的提供者,也是知识和技能的传播者。然而,培训师的品质和能力往往难以直观评估,这使得企业在选择合适的培训师时面临挑战。本文将探讨如何通过观察和...

    阿里巴巴诚信通:销售技能培训_行政管理体系 新员工入职管理.ppt

    阿里巴巴诚信通销售技能培训中提到销售的七个境界,分别是:赤手空拳、不敢拔刀、四处乱砍、花拳秀腿、一击必杀、摘叶飞花、不战而胜。这些境界可以帮助销售人员更好地理解销售的艺术和技巧。 二、销售成功的关键 ...

    某科技诚信通:销售技能培训.pptx

    这七个境界包括:赤手空拳(初学者)、不敢拔刀(害怕挑战)、四处乱砍(缺乏策略)、花拳秀腿(技巧表面化)、一击必杀(高效成交)、摘叶飞花(游刃有余)和不战而胜(影响力销售)。 销售人员的态度是驱动他们...

    阿里巴巴诚信通:销售技能培训.ppt

    销售的七个境界是指销售人员在与客户沟通过程中所需要具备的七种境界,即赤手空拳、不敢拔刀、四处乱砍、花拳秀腿、一击必杀、摘叶飞花、不战而胜。这七个境界是销售人员在与客户沟通过程中所需要具备的基本能力和...

    j2ee经典案例设计与实现

    虽说是实例书籍,但它明显高于同类书籍,每个实例都涵盖了多个技术要点,而且实例注重于实际应用,简单对象的应用,图形图像、多媒体、数据库的处理,最后还讲解了综合应用实例开发,而不像有的实例图书,花拳绣腿,...

    商务礼仪演示文稿(新).pptx

    总之,商务礼仪并非花拳绣腿,而是现代社会中不可或缺的素养。它关乎个人成功、事业发展,甚至影响到下一代的教育。通过提升自身的礼仪水平,人们可以在不增加额外成本的情况下,为个人和企业创造更大的价值。在商务...

    诚信通销售技巧.pptx

    在销售过程中,销售人员需要经历不同的境界,从最初的无经验到最终的娴熟自如,这七个境界分别是赤手空拳、不敢拔刀、四处乱砍、花拳绣腿、一击必杀、摘叶飞花以及不战而胜。这些境界代表了销售技能的逐步提升和对...

    玩透sed:探究sed原理.pdf

    sed原理、机制探究,适合sed深入。...sed修炼系列(一):花拳绣腿之入门篇 sed修炼系列(二):武功心法(info sed翻译+注解) sed修炼系列(三):sed高级应用之实现窗口滑动技术 sed修炼系列(四):sed中的疑难杂症

    实用主义测试员眼中的测试理论

     测试的各种理论知识就像武功中的内功心法,各种测试技巧和测试工具则像招式和兵器,如果忽略了内功心法的修炼,即使招式和兵器熟练使用,也可能只是花拳绣腿,没有很强的杀伤力。  对待测试理论的辨证态度  ...

    对高职院校应用写作课程性质的再思考 (2012年)

    一些教师在备课时采取“花拳绣腿”的方式,使得教学效果不理想。学生在写作能力上表现低下,缺乏学习动力和兴趣。究其原因,一方面是因为教材内容过于泛泛,缺乏针对性,另一方面也反映出课程内容的设计和教学方法的...

    学术报告记录

    - 切勿花拳绣腿:避免表面功夫,注重实质成果。 - 不可钻牛角尖:避免陷入不必要的细节纠缠。 #### 二、如何撰写开题报告 - **开题报告定义**:开题报告是一种文字形式的科研项目说明材料,旨在明确研究的目标、...

    Master-Emacs-Lisp-with-Solid-Procedures:大师Emacs-Lisp

    ”铁指”乃是硬功夫,真功夫,绝非”花拳绣腿”。 ”寸进”指看得见摸得着,可测量可预期,实打实的进益,一寸一寸,力无虚发,如此则功不唐捐,在扎实可见的成果的即时反馈之中,耐心信心必然也与日俱增。所谓”零...

    福建地方拳种--狗拳.doc

    泉州庄氏犬法则注重快速、猛烈的进攻,融入了花拳和罗汉拳的元素;福州义香犬法则上、中、下盘技术均衡,保留了狗拳的原始风貌。 狗拳作为福建的地方拳种,不仅是一种武术形式,更是福建传统文化的重要组成部分。...

    中国招商引资第一人抖出商业七大陷阱.pdf

    2. 陷阱二:招招必中的花拳 好产品的标准并非单一,而是需要考虑产品功效、市场需求、竞品分析等多个方面。经销商应全面评估产品的实际价值、市场潜力、独特性、卖点以及市场适应性,而不是仅依赖销售团队和运营能力...

Global site tag (gtag.js) - Google Analytics