1. 程式人生 > >spring配置檔案中的 id和name

spring配置檔案中的 id和name

今天在分析問題時發現一個大家平時都不太注意的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程式碼  收藏程式碼
  1. <bean class="com.xxx.UserInfo">  
  2.     <property name="accountName" value="no-id-no-name0"></property>  
  3. </bean>  
  4. <bean class="com.xxx.UserInfo">  
  5.     <property name="accountName" value="no-id-no-name1"></property>  
  6. </bean>  
  7. <bean class
    ="com.xxx.UserInfo">  
  8.     <property name="accountName" value="no-id-no-name2"></property>  
  9. </bean>  


獲取bean的方式: 
Java程式碼  收藏程式碼
  1. UserInfo u4 = (UserInfo)ctx.getBean("com.xxx.UserInfo");  
  2. UserInfo u5 = (UserInfo)ctx.getBean("com.xxx.UserInfo#1");  
  3. UserInfo u6 = (UserInfo)ctx.getBean("com.xxx.UserInfo#2");