博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring配置中id和name属性的区别
阅读量:3902 次
发布时间:2019-05-23

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

  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通过getBean(“com.stamen.BeanLifeCycleImpl”)获得,

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

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

你可能感兴趣的文章
78. 子集
查看>>
89. 格雷编码
查看>>
刚开始学python,对脚本语言的一些理解
查看>>
matplotlib进行绘图——散点图
查看>>
matplotlib进行绘图——直方图
查看>>
需求文件requirements.txt的创建及使用
查看>>
300. 最长上升子序列
查看>>
445. 两数相加 II
查看>>
449. 序列化和反序列化二叉搜索树
查看>>
450. 删除二叉搜索树中的节点
查看>>
451. 根据字符出现频率排序
查看>>
454. 四数相加 II
查看>>
467. 环绕字符串中唯一的子字符串
查看>>
468. 验证IP地址
查看>>
474. 一和零
查看>>
486. 预测赢家
查看>>
494. 目标和
查看>>
520. 检测大写字母
查看>>
数据处理和训练模型的技巧
查看>>
vb 中如何做同步 异步?
查看>>