cle*_*tus 129
每个bean都有一个或多个id(也称为标识符或名称;这些术语指的是同一个东西).这些id在托管bean的容器中必须是唯一的.一个bean几乎总是只有一个id,但如果一个bean有多个id,那么额外的bean基本上可以被认为是别名.
使用基于XML的配置元数据时,可以使用"id"或"name"属性来指定bean标识符.'id'属性允许您指定一个id,因为它是一个真正的XML元素ID属性,当其他元素引用id时,XML解析器能够做一些额外的验证; 因此,它是指定bean id的首选方法.但是,XML规范确实限制了XML ID中合法的字符.这通常不是约束,但如果您需要使用这些特殊XML字符之一,或者想要向bean引入其他别名,您还可以或者改为指定一个或多个bean id,用逗号分隔(, ),分号(;)或'name'属性中的空格.
所以基本上该id
属性符合XML id属性标准,name
而且更灵活一些.一般来说,我name
几乎完全使用.它似乎更像是"春天".
Dun*_*nes 76
从Spring 3.1开始,该id
属性为a,xsd:string
并允许与属性相同的字符范围name
.
a id
和a 之间的唯一区别name
是a name
可以包含由逗号,分号或空格分隔的多个别名,而a id
必须是单个值.
从Spring 3.2文档:
在基于XML的配置元数据中,使用id和/或name属性指定bean标识符.id属性允许您指定一个id.通常这些名称是字母数字('myBean','fooService'等),但也可以是特殊字符.如果要向bean引入其他别名,还可以在name属性中指定它们,用逗号(,),分号(;)或空格分隔.作为历史记录,在Spring 3.1之前的版本中,id属性被键入为xsd:ID,它约束了可能的字符.从3.1开始,它现在是xsd:string.请注意,bean ID唯一性仍由容器强制执行,但不再由XML解析器强制执行.
pug*_*arx 47
任何一个都可以工作.这取决于您的需求:
如果您的bean标识符包含example(/viewSummary.html
)的特殊字符,则不允许它作为bean id
,因为它不是有效的XML ID.在这种情况下,您可以跳过定义bean id
并提供bean name
.
该name
属性还有助于alias
为bean 定义es,因为它允许为给定的bean指定多个标识符.
让我回答下面的问题
在 <bean> 标签上使用 id属性和使用 name属性有什么区别,
没有区别。在 <bean> 标签上使用 id 或 name 时,您将体验到相同的效果。
如何?
id 和 name 属性都为我们提供了一种向 bean 提供标识符值的方法(此时,认为 id 表示 id 而不是标识符)。在这两种情况下,如果您调用 ,您将看到相同的结果applicationContext.getBean("bean-identifier");
。
以@Bean,<bean> 标签的java 等价物为例,你不会找到id 属性。您只能通过 name 属性将标识符值提供给 @Bean。
我通过一个例子来解释一下:
以这个配置文件,我们称它为 spring1.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
<bean id="foo" class="com.intertech.Foo"></bean>
<bean id="bar" class="com.intertech.Bar"></bean>
</beans>
Run Code Online (Sandbox Code Playgroud)
Spring 为, 返回 Foo 对象Foo f = (Foo) context.getBean("foo");
。替换id="foo"
与name="foo"
上述spring1.xml,你仍然可以看到同样的结果。
定义您的 xml 配置,例如,
<?xml version="1.0" encoding="UTF-8"?>
<beans ...>
<bean id="fooIdentifier" class="com.intertech.Foo"></bean>
<bean name="fooIdentifier" class="com.intertech.Foo"></bean>
</beans>
Run Code Online (Sandbox Code Playgroud)
你会得到 BeanDefinitionParsingException。它会说,Bean 名称 'fooIdentifier' 已在此元素中使用。顺便说一句,如果您有以下配置,您将看到相同的例外
<bean name="fooIdentifier" class="com.intertech.Foo"></bean>
<bean name="fooIdentifier" class="com. intertech.Foo"></bean>
如果您将 id 和 name 都保留在 bean 标记中,则认为 bean 具有 2 个标识符。您可以使用任何标识符获得相同的 bean。将配置作为
<?xml version="1.0" encoding="UTF-8"?><br>
<beans ...>
<bean id="fooById" name="fooByName" class="com.intertech.Foo"></bean>
<bean id="bar" class="com.intertech.Bar"></bean>
</beans>
Run Code Online (Sandbox Code Playgroud)
以下代码打印为真
FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(...);
Foo fooById = (Foo) context.getBean("fooById")// returns Foo object;
Foo fooByName = (Foo) context.getBean("fooByName")// returns Foo object;
System.out.println(fooById == fooByName) //true
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
98437 次 |
最近记录: |