1.id属性命名必须满足xml命名规范,因为id其实是xml中就做了规范。总结起来相当于java的命名规范,不能以数字,符号大头不能有空格,如123,?ad,"ab "等都是不规范的,Spring在初始化时就会报错,诸如:
Java代码
1. org.xml.sax.SAXParseException: Attribute value "?ab" of type ID must be a name.
org.xml.sax.SAXParseException: Attribute value "?ab" of type ID must be a name.
2.name属性没有以上规定,但是在getBean()会报错
Java代码
1. org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'a b' is defined
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'a b' is defined
3。配置文件不允许出现两个id相同的<bean>,否则初始化时会报错
4.name属性可以但是getBean得到的是后一个实例
5.name属性可以用,隔开多个名字
6.如果name,id都没指定,那么用类全名作为name
7.如果存在多个id和name都没有指定,且实例类都一样的<bean>,如:
Java代码
1. <bean class="com.stamen.BeanLifeCycleImpl"/>
2. <bean class="com.stamen.BeanLifeCycleImpl"/>
3. <bean class="com.stamen.BeanLifeCycleImpl"/>
<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指定唯一名称才是王道
Java代码
1. org.xml.sax.SAXParseException: Attribute value "?ab" of type ID must be a name.
org.xml.sax.SAXParseException: Attribute value "?ab" of type ID must be a name.
2.name属性没有以上规定,但是在getBean()会报错
Java代码
1. org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'a b' is defined
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'a b' is defined
3。配置文件不允许出现两个id相同的<bean>,否则初始化时会报错
4.name属性可以但是getBean得到的是后一个实例
5.name属性可以用,隔开多个名字
6.如果name,id都没指定,那么用类全名作为name
7.如果存在多个id和name都没有指定,且实例类都一样的<bean>,如:
Java代码
1. <bean class="com.stamen.BeanLifeCycleImpl"/>
2. <bean class="com.stamen.BeanLifeCycleImpl"/>
3. <bean class="com.stamen.BeanLifeCycleImpl"/>
<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指定唯一名称才是王道