文章出處

今天在分析問題時發現一個大家平時都不太注意的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.   
  5. <bean class="com.xxx.UserInfo">  
  6.     <property name="accountName" value="no-id-no-name1"></property>  
  7. </bean>  
  8.   
  9. <bean class="com.xxx.UserInfo">  
  10.     <property name="accountName" value="no-id-no-name2"></property>  
  11. </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"); 

    相關:在配置spring標簽是name和id的區別


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()