加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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 name.
3、name属性则没有这些限定,你可以使用几乎任何的名称,如?ab,123等,但不能带空格,如”a b”,” abc”,,这时,虽然初始化时不会报错,但在getBean()则会报出诸如以下的错误:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ’a b’ is defined
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.
5、如果id和name都没有指定,则用类全名作为name,如<bean>,则你可以通过 getBean(“com.shaxiaozi.A”)返回该实例。
6、如果存在多个id和name都没有指定,且实例类都一样的<bean>,如:
<bean class=”com.stamen.BeanLifeCycleImpl”/>
<bean class=”com.stamen.BeanLifeCycleImpl”/>
<bean class=”com.stamen.BeanLifeCycleImpl”/>
调用方式依次:
getBean(“com.stamen.BeanLifeCycleImpl”)
getBean(“com.stamen.BeanLifeCycleImpl#1″)
getBean(“com.stamen.BeanLifeCycleImpl#2″)

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有