国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Spring XML配置十二個最佳實踐

2019-11-18 12:58:37
字體:
來源:轉載
供稿:網友

  在這篇文章里,對于SPRing xml的配置,我將向你展示12種比較好的實踐。其中的一些實踐不僅是好的實踐,更是必要的實踐。除此以外,還有其他因素,例如領域模型的設計,都能影響XML的配置,但是這篇文章重點研究XML配置的易讀性和易治理性。

  1。不要使用autowiring

  Spring可以通過類的自省來自動綁定其依靠部分,使得你不必明確指明bean的屬性和構造器。Bean的屬性可以通過屬性名稱或類型匹配來實現自動綁定。構造器通過類型匹配來實現自動綁定。你甚至可以指定自動檢測自動綁定模式,它可以引導Spring選擇一種適當的運行機制。先來看看下面的一個例子:
            class="com.lizjason.spring.OrderService"
        autowire="byName"/>
  OrderService類的屬性名在容器中用于匹配bean實例。自動綁定可以潛在地節省一些打字和減少一些混亂。但是在現實世界的工程里你不應該使用這種方式,這是因為它犧牲了配置的清楚性和可維護性。許多指南和介紹中大量吹捧自動綁定是Spring的一種極好的特征而沒有提到這一特性所帶來的犧牲。依我的觀點,這就像Spring中的object-pooling,它更像是一種為了占據更多市場的商業特征。它對于XML配置文件的小巧化是一個好辦法,但實際上也增加了復雜程度,尤其當你運行有大量類聲明的工程時。雖然Spring答應你混合自動綁定和手動綁定,但是這個矛盾會使XML配置更加晦澀難懂。

  2.使用通俗的命名

  這個方式對于java編碼也一樣適用。在工程中使用清楚的、描述性的、協調的通俗名稱對于開發者理解XML配置是十分有益的。例如對于bean ID,你可以根據通俗的Java類名來命名它。對于例子中OrderServiceDAO的bean ID命名為orderServiceDAO。對于大的工程,你可以在bean ID前面加上包名作為前綴。

  3. 使用簡潔的形式

  簡潔形式避免了冗長,是因為它從子元素中將屬性值和參考寫到屬性中。例如下面的例子:
            class="com.lizjason.spring.OrderService">
        
            lizjason
        

        
            
        

    


  可以使用簡潔形式將上述代碼重寫為:
            class="com.lizjason.spring.OrderService">
                    value="lizjason"/>
        
    

  簡潔形式功能在1.2版本中可以使用。對于沒有簡潔形式。
簡潔形式不但可以節約你的打字,而且可以使XML配置文件清楚。它最引人注目的是當在一個配置文件中有大量定義的類時可以提高易讀性。

  4. 對于構造器參數匹配,類型名比序號好。

  當一個構造器含有一個以上的同種類型的參數,或者屬性值的標簽已經被占用時,Spring答應你使用從0計數的序號來解決這些會帶來混淆的問題。例如:
            class="com.lizjason.spring.BillingService">
        
        
    


  像下面這樣,利用類型屬性來編寫會更好一些:
            class="com.lizjason.spring.BillingService">
                    value="lizjason"/>
        
    

  使用索引可以稍稍減少一些冗長,但是和使用類型屬性相比,它還是有輕易發生錯誤的傾向和難于閱讀的缺點。你應該只在構造器參數不明確的時候,才使用索引這一方法。

  5. 盡可能重用已定義過的bean

  Spring提供一種類似繼續一樣的機制來減少配置信息的復制并簡化XML配置。定義一個子類可以從它父類那里繼續配置信息,而父類實質上作為子類的一個模板。這就是大工程中所謂的重用。你所需要做的就是在父類bean中設置abstract=true,然后在子bean注明它自己的父類bean。例如:
            class="com.lizjason.spring.AbstractService">
                    value="lizjason"/>
    


    ippingService
        parent="abstractService"
        class="com.lizjason.spring.ShippingService">
        
    

  ShippingService類從abstractService類那里繼續companyName屬性的值——lizjason。假如你沒有為一個bean指明類或factory方法,那么這個bean便是抽象的。

  6. 盡量使用applicationContext來裝配定義的bean

  像在Ant腳本中的引用一樣,Spring的引用對于裝配模塊化的bean來說是很有用的。例如:
    
        
        
                    class="com.lizjason.spring.OrderService"/>
    
  相對于使用import在XML配置中來預裝配,通過ApplicationContext來配置這些beans,顯得更加靈活。利用ApplicationContext也使得XML配置易于治理。你可以像下面的例子那樣在ApplictionContext構造器里布置bean:
    String[] serviceResources =
        {"orderServices.xml",
        "billingServices.xml",
        "shippingServices.xml"};
    ApplicationContext orderServiceContext = new
        ClassPathXmlApplicationContext(serviceResources);
  7. 利用id作為bean的標識符

  你可以指定一個id或名稱來作為bean的標識符。雖然使用id不會提高易讀性,但是它可以讓XML parser對bean的引用有效方面進行更好的驗證。假如由于XML IDREF的限制而不能使用某個id,你可以利用names來作為bean的標識符。XML IDREF的限制是id必須以字母開頭(或者在XML規范中定義的標點符號),后面接著字母,數字,連字號,下劃線,冒號等。實際上,碰到XML IDREF限制的問題是很少見的。

  8. 在開發階段使用依靠檢驗

  你可以在bean中給依靠檢驗的屬性設置值,而不采用原先默認的空值,屬性設置例如simple,object或all,以便容器進行依靠檢驗。當bean的全部的屬性(或某類屬性)需要被明確設置或自動綁定時,依靠檢驗便顯得很有用。
            class="com.lizjason.spring.OrderService"
        dependency-check="objects">
                    value="lizjason"/>
        
    
  在這個例子里,容器確保為orderService bean設置的屬性不是primitives 或者 collections。為所有的bean設置默認依靠檢測也是可以的,但是我們很少這樣做,是因為有些bean的屬性根本就不必設置。

  9. 為每個配置文件加上一個header comment

  最好使用descriptive id和名稱來代替在XML配置文件中的注釋。此外,加上一個配置文件header也很有用處,它可以概述文件中所定義的bean。你可以選擇將描述內容加入description標簽中。例如:
    
        
            This file defines billing service
            related beans and it depends on
            baseServices.xml,which provides
            service bean templates...
        

        ...
    

  使用description標簽的一個好處是可以輕易地利用工具從標簽中選取出description(的內容)。

  10. 對于任何變化,要與隊友積極交流

  當你重構Java代碼時,你需要隨時更新配置文件并且通知隊友。XML配置文件也是代碼,它們是應用程序的至關重要的部分,但是它們難于閱讀和維護。大部分時間你既要閱讀XML配置文件又要閱讀運行中的Java代碼。

  11. Setter injection優于constructor injection

  Spring提供3種類型的依靠注入: constructor injection,setter injection, 和method injection。我們一般只用前兩種類型。
            class="com.lizjason.spring.OrderService">
        
    


            class="com.lizjason.spring.BillingService">
                    ref="billingDAO">
    



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肥乡县| 博白县| 佳木斯市| 平利县| 科技| 屏边| 赫章县| 吉林省| 洛浦县| 信丰县| 柘荣县| 桐柏县| 湖口县| 祁阳县| 阿勒泰市| 广元市| 云浮市| 江阴市| 泸定县| 龙南县| 台湾省| 思茅市| 长乐市| 宁南县| 金川县| 七台河市| 福鼎市| 布尔津县| 毕节市| 苍山县| 揭西县| 田阳县| 富平县| 江口县| 江阴市| 黔江区| 阿克陶县| 防城港市| 拉孜县| 景谷| 长子县|