空間站

          北極心空

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
          在BeanFactory的配置中,<bean>是我們最常見的配置項,它有兩個最常見的屬性,即id和name,最近研究了一下,發現這兩個屬性還挺好玩的,特整理出來和大家一起分享。
          1.id屬性命名必須滿足XML的命名規范,因為id其實是XML中就做了限定的。總結起來就相當于一個Java變量的命名:不能以數字,符號打頭,不能有空格,如123,?ad,"ab "等都是不規范的,Spring在初始化時就會報錯,諸如:
          代碼:
          org.xml.sax.SAXParseException: Attribute value "?ab" of type ID must be a name.


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


          3.配置文件中不允許出現兩個id相同的<bean>,否則在初始化時即會報錯,如:
          代碼:
          org.xml.sax.SAXParseException: Attribute value "aa" of type ID must be unique within the document.
          4.但配置文件中允許出現兩個name相同的<bean>,在用getBean()返回實例時,后面一個Bean被返回,應該是前面那個<bean>被后面同名的 <bean>覆蓋了。有鑒于此,為了避免不經意的同名覆蓋的現象,盡量用id屬性而不要用name屬性。

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

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

          7.如果存在多個id和name都沒有指定,且實例類都一樣的<bean>,如:
          代碼:
          <bean>
          ? ?<bean>
          ? ?<bean>
          則第一個bean通過getBean("com.stamen.BeanLifeCycleImpl")獲得,
          第二個bean通過getBean("com.stamen.BeanLifeCycleImpl#1")獲得,
          第三個bean通過getBean("com.stamen.BeanLifeCycleImpl#2")獲得,以此類推。

          [小結]
          當然,這些都是奇技淫巧,不足以去實踐,通過id指定唯一名稱才是陽光大道,其他僅作為一笑而過的見聞罷了。

          posted on 2006-12-22 16:03 蘆葦 閱讀(634) 評論(0)  編輯  收藏 所屬分類: Spring
          主站蜘蛛池模板: 金沙县| 永和县| 宝兴县| 靖远县| 临夏县| 龙井市| 聂拉木县| 江津市| 博白县| 沙雅县| 正蓝旗| 湘潭市| 宾阳县| 徐汇区| 康平县| 凌源市| 兰坪| 武威市| 湟中县| 福贡县| 广水市| 沙洋县| 兰溪市| 锡林浩特市| 黑山县| 淮阳县| 柳林县| 兴义市| 溧水县| 吉首市| 基隆市| 牡丹江市| 普宁市| 阿克陶县| 灵川县| 澄迈县| 崇信县| 兴海县| 吉隆县| 海南省| 兴义市|