在Springconfiguration文件中使用bean id和name之间的区别

在Springconfiguration文件中的<bean>元素上使用id属性和name属性有什么区别吗?

从Spring引用 3.2.3.1命名Bean :

每个bean都有一个或多个id(也称为标识符或名称;这些术语是指相同的东西)。 这些id在bean所在的容器中必须是唯一的。一个bean几乎总是只有一个id,但是如果一个bean有多个id,多余的可以被认为是别名。

使用基于XML的configuration元数据时,可以使用“id”或“name”属性来指定bean标识符。 'id'属性允许你指定一个id,因为它是一个真正的XML元素ID属性,当其他元素引用id时,XMLparsing器能够做一些额外的validation。 因此,这是指定一个bean id的首选方法。 但是,XML规范的确限制了XML ID中合法的字符。 这通常不是一个约束,但是如果您需要使用这些特殊的XML字符之一,或者想要向bean引入其他别名,您也可以指定一个或多个用逗号分隔的bean id, ),分号(;)或“name”属性中的空格。

所以基本上id属性符合XML id属性标准,而name更灵活一点。 一般来说,我几乎完全使用name 。 它似乎更“spring”。

自Spring 3.1以来, id属性是一个xsd:string并且允许与name属性相同的字符范围。

一个id和一个name的唯一区别就是一个name可以包含多个由逗号,分号或空格分隔的别名,而一个id必须是一个单一的值。

从Spring 3.2文档:

在基于XML的configuration元数据中,使用id和/或name属性来指定bean标识符。 id属性允许你指定一个id。 通常这些名称是字母数字('myBean','fooService'等),但也可能是特殊字符。 如果您想向bean引入其他别名,也可以在name属性中指定它们,用逗号(,),分号(;)或空格分隔。 作为历史logging,在Spring 3.1之前的版本中,id属性被键入为xsd:ID,这限制了可能的字符。 从3.1开始,现在是xsd:string。 请注意,bean id唯一性仍由容器强制执行,尽pipe不再由XMLparsing器执行。

任何一个都可以工作。 这取决于你的需求:
如果您的bean标识符包含特殊字符(例如( /viewSummary.html )), /viewSummary.html其作为bean id ,因为它不是有效的XML标识符。 在这种情况下,您可以跳过定义bean id并提供bean name
name属性还有助于为bean定义alias es,因为它允许为给定的bean指定多个标识符。