博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring bean id和name
阅读量:6847 次
发布时间:2019-06-26

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

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

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

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

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

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

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

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

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

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

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

Java代码 收藏代码

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

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

转载于:https://juejin.im/post/5aed50e96fb9a07aa9259bcc

你可能感兴趣的文章
Java数据结构与算法(7) - ch05双向链表(Double List)
查看>>
fiddler 教程
查看>>
自适应布局
查看>>
ILSpy c#反编译工具,附下载地址
查看>>
课堂练习——查找水王续
查看>>
在后台设置yii的配置文件
查看>>
(4/24) webpack3.x快速搭建本地服务和实现热更新
查看>>
Failure is not fatal, but failure to change might be.
查看>>
L2-015. 互评成绩
查看>>
iOS9新特性
查看>>
poj3186 poj3267
查看>>
烂泥:学习centos之快速搭建LNMP环境
查看>>
Poj2723:Get Luffy Out
查看>>
L365
查看>>
SUST OJ 1642: 绝地求生—死亡顺序
查看>>
Android中XML解析-Dom解析
查看>>
highcharts 多数据+切换
查看>>
关于输入输出及编译优化 模板代码
查看>>
世界上各种壮观震撼奇景。也许你这辈子都看不到了!
查看>>
安装包制作工具 SetupFactory使用2 API清单
查看>>