談?wù)凷pring配置中的id和name屬性有意思的地方(轉(zhuǎn))


              其實(shí)這篇文章很早看到的,但仔細(xì)想想其實(shí)沒多大意思,有一次維護(hù)代碼的時(shí)候,發(fā)現(xiàn)一些看似有意思的寫法,就在本博記錄下,容易遺忘。
          小技巧感覺上很有意思,但并不是很實(shí)用,容易理解的配合,方便維護(hù)的配置,才是最好的代碼。搞點(diǎn)小技巧,不方便維護(hù)。

              在BeanFactory的配置中,<bean>是我們最常見的配置項(xiàng),它有兩個最常見的屬性,即id和name,最近研究了一下,發(fā)現(xiàn)這兩個屬性還挺好玩的,特整理出來和大家一起分享。

          1.id屬性命名必須滿足XML的命名規(guī)范,因?yàn)閕d其實(shí)是XML中就做了限定的。總結(jié)起來就相當(dāng)于一個Java變量的命名:不能以數(shù)字,符號打頭,不能有空格,如123,?ad,"ab "等都是不規(guī)范的,Spring在初始化時(shí)就會報(bào)錯,
              org
          .xml.sax.SAXParseException: Attribute value "?ab" of type ID must be a name.

          2.name屬性則沒有這些限定,你可以使用幾乎任何的名稱,如?ab,123等,但不能帶空格,如"a b"," abc",,這時(shí),雖然初始化時(shí)不會報(bào)錯,但在getBean()則會報(bào)出諸如以下的錯誤:
             org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'a b' is defined

          3.配置文件中不允許出現(xiàn)兩個id相同的<bean>,否則在初始化時(shí)即會報(bào)錯,如:
            org.xml.sax.SAXParseException: Attribute value "aa" of type ID must be unique within the document.

          4.但配置文件中允許出現(xiàn)兩個name相同的<bean>,在用getBean()返回實(shí)例時(shí),后面一個Bean被返回,應(yīng)該是前面那個<bean>被后面同名的 <bean>覆蓋了。有鑒于此,為了避免不經(jīng)意的同名覆蓋的現(xiàn)象,盡量用id屬性而不要用name屬性。

          5.name屬性可以用,隔開指定多個名字,如<bean name="b1,b2,b3">,相當(dāng)于多個別名,這時(shí)通過getBean("a1") getBean("a2") getBean("a3")返回的都是同一個實(shí)例(假設(shè)是singleton的情況)

          6.如果id和name都沒有指定,則用類全名作為name,如<bean class="com.stamen.BeanLifeCycleImpl">,則你可以通過
          getBean("com.biao.GroupThreadImpl")返回該實(shí)例。

          7.如果存在多個id和name都沒有指定,且實(shí)例類都一樣的<bean>,如:

           <bean class="com.biao.GroupThreadImpl"/>

          <bean class="com.biao.GroupThreadImpl"/>

          <bean class="com.biao.GroupThreadImpl"/>

          則第一個bean通過getBean("com.biao.GroupThreadImpl")獲得,

          第二個bean通過getBean("com.biao.GroupThreadImpl#1")獲得,

          第三個bean通過getBean("com.biao.GroupThreadImpl#2")獲得,以此類推。








          posted on 2009-11-03 17:10 胡鵬 閱讀(363) 評論(0)  編輯  收藏 所屬分類: spring


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          <2009年11月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統(tǒng)計(jì)

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          agile

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 牙克石市| 阜新| 霸州市| 醴陵市| 宁乡县| 都江堰市| 长寿区| 菏泽市| 蓝田县| 张家港市| 高州市| 宜丰县| 台南县| 秀山| 寻甸| 兴和县| 德清县| 启东市| 龙泉市| 化隆| 咸阳市| 西安市| 饶平县| 彭泽县| 山东| 铜川市| 莱阳市| 襄垣县| 汶川县| 凌源市| 汤阴县| 富蕴县| 淮南市| 云南省| 舞钢市| 堆龙德庆县| 钟祥市| 自治县| 龙游县| 肇庆市| 类乌齐县|