1. 程式人生 > >spring 中<bean>的id 和name 的區分

spring 中<bean>的id 和name 的區分

lifecycle 文件中 空格 當前 基本類 分號 推薦 第一個 沖突

1. id 和name 屬性作用上一樣,推薦使用id;

2. id取值要求嚴格些,必須滿足XML的命名規範。id是唯一的,配置文件中不允許出現兩個id相同的<bean>。

3. name取值比較隨意,甚至可以用數字開頭。在配置文件中允許出現兩個name相同的<bean>,在用getBean()返回實例時,後面一個Bean被返回。

4. 如果沒有id,name,則用類的全名作為name,如<bean class="test.Test">,可以使用getBean("test.Test")返回該實例。

5. id的時候用分號(“;”)、空格(“ ”)或逗號(“,”)分隔開就只能當成一個標識,name的時候用分號(“;”)、空格(“ ”)或逗號(“,”)

分隔開就要當成分開來的多個標識(相當於別名 alias 的作用)。

如:

name=“1 2 3 4”等同於 name=“1,2,3,4” 這樣寫相當於有 1 2 3 4(4個)個標識符標識當前bean

id=“1 2 3 4” 這樣寫相當於有 “1 2 3 4”(1個)個標識符標識當前bean

6. 如果既配置了 id ,也配置了 name ,則兩個都生效。

7. 如果存在多個id和name都沒有指定,且實例類都一樣的,如:

代碼

<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”)獲得,以此類推。

8.註解和配置文件都存在的時候

如果配置基本類的時候,註解和配置文件都使用的時候,註解和配置文件中 name 不相同的時候, 則兩個不沖突,都能夠生效。

如果配置基本類的時候,註解和配置文件都使用的時候,註解和配置文件中 name 相同的時候, 則兩個沖突,配置文件生效。

如果類作為引用類的時候,並且自動註入的時候,註解和配置文件都配置的時候,如果 name 相同的話,配置文件生效。

如果類作為引用類的時候,並且自動註入的時候,註解和配置文件都配置的時候,如果 name 不相同的話,就按照 Autowired的匹配規則去匹配。

備註: Autowired的匹配規則 1.ByType 2. ByName

參考:

http://blog.csdn.net/qq_22063697/article/details/51912386

http://www.cnblogs.com/flying607/p/5132293.html

spring 中<bean>的id 和name 的區分