Spring中XML設定檔的十二個最佳方法(上)

來源:互聯網
上載者:User

引用:http://developer.51cto.com/art/200906/129816.htm

 

    本文介紹Spring中XML設定檔的十二個最佳方法中的前六個,包括使用簡潔形式,使用命名規範等。
  •  
    1. <bean id="orderService" 
    2.         class="com.lizjason.spring.OrderService" 
    3.         autowire="byName"/> 
    1. <bean id="orderService" 
    2.         class="com.lizjason.spring.OrderService"> 
    3.         <property name="companyName"> 
    4.             <value>lizjasonvalue> 
    5.         property> 
    6.         <constructor-arg> 
    7.             <ref bean="orderDAO"> 
    8.         constructor-arg> 
    9.     bean> 
    1. <bean id="orderService" 
    2.         class="com.lizjason.spring.OrderService"> 
    3.         <property name="companyName" 
    4.             value="lizjason"/> 
    5.         <constructor-arg ref="orderDAO"/> 
    6.     bean>  
    1. <bean id="abstractService" abstract="true" 
    2.         class="com.lizjason.spring.AbstractService"> 
    3.         <property name="companyName" 
    4.             value="lizjason"/> 
    5.     bean> 
    6.     <bean id="shippingService" 
    7.         parent="abstractService" 
    8.         class="com.lizjason.spring.ShippingService"> 
    9.         <property name="shippedBy" value="lizjason"/> 
    10.     bean>  
    1. <beans> 
    2.         <import resource="billingServices.xml"/> 
    3.         <import resource="shippingServices.xml"/> 
    4.         <bean id="orderService" 
    5.             class="com.lizjason.spring.OrderService"/> 
    6.     <beans>  
    1. String[] serviceResources =  
    2.         {"orderServices.xml",  
    3.         "billingServices.xml",  
    4.         "shippingServices.xml"};  
    5.     ApplicationContext orderServiceContext = new 
    6.         ClassPathXmlApplicationContext(serviceResources);  
  •  

    1。避免使用自動綁定(autowiring)功能
    Spring 可以通過bean類的自省自動綁定依賴性,所以不必顯式指明bean的屬性和建構函式。Bean屬性可以通過屬性名稱或類型匹配來實現自動綁定。建構函式通過類型匹配來實現自動綁定。甚至可以指定自動檢測autowiring模式,它可以引導Spring選擇一種適當的運行機制。先來看看下面的一個例子:

    OrderService 類的屬性名稱在容器中用於匹配bean執行個體。自動綁定可能會節省一些鍵入工作量並減少混亂。但是在現實項目中不應該使用這種方式,因為它犧牲了配置的可讀性和可維護性。許多指南和介紹中大肆吹捧自動綁定是Spring的一項極好的特性,而沒有提到這一特性所帶來的犧牲。依我來看,這就像Spring中的對象池(object-pooling),更大程度上只是宣傳的噱頭。對於精簡XML設定檔來說,它是一個好辦法,但它實際上增加了複雜性,尤其是在運行包含大量類聲明的項目時。雖然Spring允許混合使用自動綁定和顯式綁定,但這會使XML配置更加晦澀難懂。

    2.使用命名規範
    該原則對於Java編碼也一樣適用。在項目中使用清晰的、描述性的、一致的命名規範將非常有利於開發人員理解XML配置。例如,對於bean ID,可以按照Java類欄位名約定來命名它。OrderServiceDAO執行個體的bean ID應該命名為orderServiceDAO。對於大型項目,可以在bean ID前面加上包名作為首碼。

    3. 使用簡潔形式
    簡潔形式避免了冗長,因為它將屬性值和引用從子項目中移入屬性中。例如下面的例子:

    可以使用簡潔形式將上述代碼重寫為:

    簡潔形式自1.2版本起就可以使用。注意,對於,沒有簡潔形式。
    簡潔形式不但可以節約鍵入工作量,而且可以使XML設定檔更清晰。當一個設定檔中定義了大量的類時,它可以顯著提高可讀性。

    4. 對於建構函式參數匹配,類型比下標好
    當建構函式含有一個以上同種類型的參數,或者屬性值的標籤已經被佔用時,Spring允許使用從0開始的下標來避免混淆。例如:

 
  1. <bean id="billingService" 
  2.         class="com.lizjason.spring.BillingService"> 
  3.         <constructor-arg index="0" value="lizjason"/> 
  4.         <constructor-arg index="1" value="100"/> 
  5.     bean> 

利用type屬性來編寫會更好一些,如下:

 
  1. <bean id="billingService" 
  2.         class="com.lizjason.spring.BillingService"> 
  3.         <constructor-arg type="java.lang.String" 
  4.             value="lizjason"/> 
  5.  
  6.         <constructor-arg type="int" value="100"/> 
  7.     bean>  

使用index可以減少一些代碼,但是與type屬性相比,它更易於出錯且難於閱讀。只有在建構函式參數不明確的時候,才應該使用index。

5. 儘可能重用已定義的bean
Spring 提供了一種類似於繼承的機制來減少配置資訊的複製並簡化XML配置。定義一個子類,它就可以從父類那裡繼承配置資訊,而父類實際上成為子類的一個模板。這就是大型項目中所謂的重用。只需在父類bean中設定abstract=true,然後在子bean中指定parent引用。例如:

ShippingService類從abstractService類繼承companyName屬性的值——lizjason。如果一個bean沒有指定類或Factory 方法,那麼這個bean便是抽象的。

6. 在匯入時,首選通過ApplicationContext來彙編bean定義
像Ant指令碼中的匯入一樣,Spring的import元素對於彙編模組化的bean定義來說是很有用的。例如:

然而,相對於使用import在XML配置中進行預彙編,通過ApplicationContext來配置這些bean則顯得更加靈活。使用 ApplicationContext的話,XML配置也更易於管理。可以向ApplictionContext建構函式傳遞一組bean定義,如下:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.