Spring中bean的id属性和name属性(转载)
(2012-04-26 15:46:38)
标签:
杂谈 |
分类: Struts Spring Hibernate学习 |
1、name与id之间的关系,name中文意思是名字,在这里就是一个bean定义的别名,默认等于id值。
2、id命名必须满足XML的命名规范,因为id其实是XML中就做了限定的。总结起来就相当于一个Java变量的命名:不能以数字,符号打头,不能有空格,如123,?ad,”ab
“等都是不规范的,Spring在初始化时就会报错,诸如:
org.xml.sax.SAXParseException:Attribute value ”?ab” of type ID must be a name.
org.xml.sax.SAXParseException:
3、name属性则没有这些限定,你可以使用几乎任何的名称,如?ab,123等,但不能带空格,如”a b”,”
abc”,,这时,虽然初始化时不会报错,但在getBean()则会报出诸如以下的错误:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ’a b’ is defined
org.springframework.beans.factory.NoSuchBeanDefinitionExce
4、在spring同一个上下文中id,name只能有一个,但是同一个id可以用多个别名,比如<bean
id=”a” name=”a1,a2,a3″
class=”com.shaxiaozi.A”/>,a1,a2,a3指向的是同一个对象[前提是单例的情况下]。如果不是单例则创建了和name数量相等的bean实体。
两个id相同的<bean>,否则在初始化时即会报错,如:
org.xml.sax.SAXParseException:Attribute value ”aa” of type ID must be unique within the document.
org.xml.sax.SAXParseException:
5、如果id和name都没有指定,则用类全名作为name,如<bean>,则你可以通过 getBean(“com.shaxiaozi.A”)返回该实例。
6、如果存在多个id和name都没有指定,且实例类都一样的<bean>,如:
<beanclass=”com.stamen.BeanLifeCycleImpl”/>
<beanclass=”com.stamen.BeanLifeCycleImpl”/>
<beanclass=”com.stamen.BeanLifeCycleImpl”/>
<bean
<bean
<bean
调用方式依次:
getBean(“com.stamen.BeanLifeCycleImpl”)
getBean(“com.stamen.BeanLifeCycleImpl#1″)
getBean(“com.stamen.BeanLifeCycleImpl#2″)
getBean(“com.stamen.BeanLifeCycleImpl”)
getBean(“com.stamen.BeanLifeCycleImpl#1″)
getBean(“com.stamen.BeanLifeCycleImpl#2″)
后一篇:2012年04月26日的日记