浏览 11149 次
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-09-17
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指定唯一名称才是阳光大道,其他仅作为一笑而过的见闻罢了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-09-18
还不错!
补充一下,id与name也可以并存! |
|
返回顶楼 | |
发表时间:2006-09-18
id跟java的变量一样。name限制的少些。不错。
|
|
返回顶楼 | |
发表时间:2006-09-18
一般都用Id,不重名的,没用过name属性
|
|
返回顶楼 | |
发表时间:2006-09-28
我也是,实际的开发中只用过id,class。
不过文章不错,项~~~~~~~~~~~~ |
|
返回顶楼 | |
发表时间:2006-09-28
《Spring专业开发指南》里面讲到这个事情。根据作者的意思,name是id的一个补充。
|
|
返回顶楼 | |