Spring利用依賴注入可以獲得簡單而有效的測試能力Spring beans依賴關系以及服務所需要的bean都將在配置文件中予以描述配置文件一般采用XML格式然而XML配置文件冗長而不易使用在你進行一個使用了大量bean的大項目中它將變得難以閱讀和控制
在這篇文章中我將給你展示種的有關Spring XML配置文件的最佳技巧請注意另外一些因素例如域模型的設計會影響到XML配置但是這篇文章更關注於XML配置的可讀性和可操控性
避免使用自動裝配
Spring可以通過bean類的自省來實現自動裝配依賴這樣的話你就不必明確地描述bean的屬性或者構造函數的參數根據屬性名稱活匹配類型bean屬性可以自動進行裝配而構造函數可以根據匹配類型自動裝配你甚至可以設置自動裝配進行自動偵測這樣Spring替你就會選擇一個合適的機制請看下面的例子
Spring可以通過bean類的自省來實現自動裝配依賴這樣的話你就不必明確地描述bean的屬性或者構造函數的參數根據屬性名稱活匹配類型bean屬性可以自動進行裝配而構造函數可以根據匹配類型自動裝配你甚至可以設置自動裝配進行自動偵測這樣Spring替你就會選擇一個合適的機制請看下面的例子
class=
com
lizjason
spring
OrderService
autowire=
byName
/>
OrderService類的屬性名被用來和容器中的一個bean實例進行匹配自動裝配會默默的保存一些類型信息並降低混亂然而由於它會犧牲掉這種配置的直觀性和可維護性你在實際的項目中將不會用到它許多指南和陳述材料都把它吹捧為Spring的一個非常cool的特性而沒有提到它的這個缺點依我之見就像Spring的對象池一樣它更多了一些商業味道它看起來好像可以使XML配置文件更精簡一些但實際上卻增加其復雜性尤其是在你的較大規模的工程中已經定義了很多bean的時候更是如此Spring允許你混合使用自動和手動裝配但是這種矛盾會使XML配置更加的令人費解
使用命名規范
和Java編碼的理念一樣在項目中始終用清晰的描述性的一致的命名規范對開發人員理解XML配置非常有用拿bean ID舉例來說你可以遵循Java類中屬性的命名規范比如說OrderServiceDAO的bean ID應該是orderServiceDAO對於大項目來說在bean ID前加包名來作為前綴
使用簡化格式
簡化格式有利於減少冗余因為它把屬性值和引用作為屬性而不是子元素看下面的例子
class=
com
lizjason
spring
OrderService
>lizjason
以上程序可以重新以簡化格式書寫為
class=
com
lizjason
spring
OrderService
>value=
lizjason
/>
簡化格式在版本時已經可用了但請注意不存在這種簡化格式不僅可以較少你的代碼輸入量而且可以使XML配置更加的清晰當你的配置文件中存在大量的bean定義時它可以顯著地提高可讀性
盡量使用type而不是index去解決構造函數參數的匹配問題
當構造函數中有多個同類型的參數時Spring只允許你使用從開始的index或者value標簽來解決這個問題請看下面的例子
class=
com
lizjason
spring
BillingService
>
最好用type屬性取代上面的做法
class=
com
lizjason
spring
BillingService
>value=
lizjason
/>
用index可以稍微減少冗余但是它更容易出錯且不如type屬性可讀性高你應該僅在構造函數中有參數沖突時使用index
如可能盡量復用bean定義
Spring提供了一種類似於繼承的機制來降低配置信息的重復並使XML配置更加的簡單一個子bean可以從它的父bean繼承配置信息本質上這個父bean就像它的子bean的一個模板這是一個在大型項目中必須使用的特性所有你要做的就是把父bean的abstract屬性置為true並在子bean中加以引用例如
class=
com
lizjason
spring
AbstractService
>value=
lizjason
/>parent=
abstractService
class=
com
lizjason
spring
ShippingService
>
shippingService bean繼承了abstractService bean的屬性companyName的值lizjason注意如果你為bean聲名一個class或工廠方法這個bean將會默認為abstract
[] []
From:http://tw.wingwit.com/Article/program/Java/ky/201311/29184.html