spring配置檔案中的 id和name
阿新 • • 發佈:2019-02-03
今天在分析問題時發現一個大家平時都不太注意的spring 配置問題,發出來分享下:
首先澄清一個概念:
同名bean:多個bean 有相同的 name 或者 id,稱之為同名bean
<bean> 的id 和 name的區別
id和name都是spring 容器中中bean 的唯一識別符號。
id: 一個bean的唯一標識 , 命名格式必須符合XML ID屬性的命名規範
name: 可以用特殊字元,並且一個bean可以用多個名稱:name=“bean1,bean2,bean3” ,用逗號或者分號或者空格隔開。如果沒有id,則name的第一個名稱預設是id
spring 容器如何處理同名bean?
同一個spring配置檔案中,bean的 id、name是不能夠重複的,否則spring容器啟動時會報錯。
如果一個spring容器從多個配置檔案中載入配置資訊,則多個配置檔案中是允許有同名bean的,並且後面載入的配置檔案的中的bean定義會覆蓋前面載入的同名bean。
spring 容器如何處理沒有指定id、name屬性的bean?
如果 一個 <bean> 標籤未指定 id、name 屬性,則 spring容器會給其一個預設的id,值為其類全名。
如果有多個<bean> 標籤未指定 id、name 屬性,則spring容器會按照其出現的次序,分別給其指定 id 值為 "類全名#1", "類全名#2"
如下:
配置檔案:
Java程式碼
獲取bean的方式:
Java程式碼
首先澄清一個概念:
同名bean:多個bean 有相同的 name 或者 id,稱之為同名bean
<bean> 的id 和 name的區別
id和name都是spring 容器中中bean 的唯一識別符號。
id: 一個bean的唯一標識 , 命名格式必須符合XML ID屬性的命名規範
name: 可以用特殊字元,並且一個bean可以用多個名稱:name=“bean1,bean2,bean3” ,用逗號或者分號或者空格隔開。如果沒有id,則name的第一個名稱預設是id
spring 容器如何處理同名bean?
同一個spring配置檔案中,bean的 id、name是不能夠重複的,否則spring容器啟動時會報錯。
如果一個spring容器從多個配置檔案中載入配置資訊,則多個配置檔案中是允許有同名bean的,並且後面載入的配置檔案的中的bean定義會覆蓋前面載入的同名bean。
spring 容器如何處理沒有指定id、name屬性的bean?
如果 一個 <bean> 標籤未指定 id、name 屬性,則 spring容器會給其一個預設的id,值為其類全名。
如果有多個<bean> 標籤未指定 id、name 屬性,則spring容器會按照其出現的次序,分別給其指定 id 值為 "類全名#1", "類全名#2"
如下:
配置檔案:
Java程式碼
- <bean class="com.xxx.UserInfo">
- <property name="accountName" value="no-id-no-name0"></property>
- </bean>
- <bean class="com.xxx.UserInfo">
- <property name="accountName" value="no-id-no-name1"></property>
- </bean>
-
<bean class
- <property name="accountName" value="no-id-no-name2"></property>
- </bean>
獲取bean的方式:
Java程式碼
- UserInfo u4 = (UserInfo)ctx.getBean("com.xxx.UserInfo");
- UserInfo u5 = (UserInfo)ctx.getBean("com.xxx.UserInfo#1");
- UserInfo u6 = (UserInfo)ctx.getBean("com.xxx.UserInfo#2");