Spring配置中<bean>的name和id属性

<转自>http://hi.baidu.com/silencefool/blog/item/2427d031acdcf049ad4b5fb1.html

 

在BeanFactory的配置中,<bean>是我们最常见的配置项,它有两个最常见的属性,即id和name,最近研究了一下,发现这两个属性还挺好玩的,特整理出来和大家一起分享。
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属性则没有这些限定,你可以使用几乎任何的名称,如?ab,123等,但不能带空格,如"a b"," abc",,这时,虽然初始化时不会报错,但在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>,否则在初始化时即会报错,如:

Java代码
  1. org.xml.sax.SAXParseException: Attribute value "aa" of type ID must be unique within the document.  
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")获得,以此类推。

Spring框架,`<bean>`标签用于定义一个Java对象,并配置属性和依赖项。`<bean>`标签有一个子标签`<properties>`,用于设置Java对象的属性值。`<properties>`标签没有子标签,只有属性。具体属性如下: - `name`:Java对象的属性名称。 - `value`:Java对象的属性值。 - `ref`:Java对象的依赖项引用的另一个Java对象的名称。 - `merge`:是否将此属性合并到父级定义。 - `ignore-unresolvable`:是否忽略无法解决的引用。 以下是一个示例的Spring配置文件,演示如何使用`<bean>`和`<properties>`标签创建和配置Java对象: ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="person" class="com.example.Person"> <property name="name" value="John"/> <property name="age" value="30"/> <property name="address"> <bean class="com.example.Address"> <property name="street" value="123 Main St"/> <property name="city" value="New York"/> <property name="state" value="NY"/> <property name="zip" value="10001"/> </bean> </property> </bean> </beans> ``` 在上述示例,`<bean>`标签定义了一个名为`person`的Java对象,其类为`com.example.Person`。`<properties>`标签用于设置`Person`对象的属性值,包括`name`和`age`两个简单属性,以及`address`一个复杂属性。`<address>`标签又包含了`<properties>`标签,用于设置`Address`对象的属性值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值