熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Spring Autowire(自動裝載)的一次實踐[1]

2013-11-23 20:48:37  來源: Java開源技術 

  緣起

  隨著系統中不斷的增加需求功能越來越多了昨天看到我項目中的applicationxml已經超過了還有Acegi和XFire的配置文件也比較長所以就想著來分拆和瘦身

  基礎

  如果沒有記錯的話Spring是從開始支持自動裝載的這並不是雞肋功能在Spring 中得到了進一步的改進到目前為止Spring共支持以下五種方式的自動裝載

  模式 說明

  no 不使用自動裝配必須通過ref元素指定依賴這是默認設置由於顯式指定協作者可以使配置更靈活更清晰因此對於較大的部署配置推薦采用該設置而且在某種程度上它也是系統架構的一種文檔形式
 
  byName 根據屬性名自動裝配此選項將檢查容器並根據名字查找與屬性完全一致的bean並將其與屬性自動裝配例如在bean定義中將autowire設置為by name而該bean包含master屬性(同時提供setMaster()方法)Spring就會查找名為master的bean定義並用它來裝配給master屬性
 
  byType 如果容器中存在一個與指定屬性類型相同的bean那麼將與該屬性自動裝配如果存在多個該類型的bean那麼將會拋出異常並指出不能使用byType方式進行自動裝配若沒有找到相匹配的bean則什麼事都不發生屬性也不會被設置如果你不希望這樣那麼可以通過設置dependencycheck=objects讓Spring拋出異常
 
  constructor 與byType的方式類似不同之處在於它應用於構造器參數如果在容器中沒有找到與構造器參數類型一致的bean那麼將會拋出異常
 
  autodetect 通過bean類的自省機制(introspection)來決定是使用constructor還是byType方式進行自動裝配如果發現默認的構造器那麼將使用byType方式

   步驟

  將applicationxml分成兩個一個文件裡面管理的是系統基本信息的Bean管理另一個文件是業務信息的Bean管理(當然如果你覺得還不夠的話可以將其按功能模塊進一步拆分)

  拆分後當然需要更改webxml中的配置如下

    <contextparam>
        <paramname>contextConfigLocation</paramname>
        <paramvalue>classpath:applicationContext*xmlclasspath:xfireservletxml</paramvalue>
    </contextparam>

  使用byType的方式對業務信息部分的Bean進行自動裝載因為我Class中的有些屬性可能並不與XML配置中的名稱一致所以想使用這樣的方式相對簡單不需要去將屬性名和XML的Bean ID一一對應配置如下

<beans defaultautowire=byType>

</beans>

  來啟動應用試試看效果吧正在我慶幸自己不用去比對名稱的時候系統到如下階段時停住了

[]  []  


From:http://tw.wingwit.com/Article/program/Java/ky/201311/29124.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.