<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-193  評論-715  文章-1  trackbacks-0
    本Blog所有內(nèi)容不得隨意轉載,版權屬于作者所有。如需轉載請與作者聯(lián)系( fastzch@163.com )。
    未經(jīng)許可的轉載,本人保留一切法律權益。
    一直以來,發(fā)現(xiàn)有某些人完全不尊重我的勞動成果,隨意轉載,提醒一下那些人小心哪天惹上官司。


    緣起
    隨著系統(tǒng)中不斷的增加需求,功能越來越多了。昨天,看到我項目中的application.xml已經(jīng)超過了1000行,還有Acegi和XFire的配置文件,也比較長,所以就想著來分拆和瘦身。

    基礎
    如果沒有記錯的話,Spring是從1.2起,開始支持自動裝載的,這并不是雞肋功能,在Spring 2.0中得到了進一步的改進。到目前為止,Spring共支持以下五種方式的自動裝載:
    模式說明
    no

    不使用自動裝配。必須通過ref元素指定依賴,這是默認設置。由于顯式指定協(xié)作者可以使配置更靈活、更清晰,因此對于較大的部署配置,推薦采用該設置。而且在某種程度上,它也是系統(tǒng)架構的一種文檔形式。

    byName

    根據(jù)屬性名自動裝配。此選項將檢查容器并根據(jù)名字查找與屬性完全一致的bean,并將其與屬性自動裝配。例如,在bean定義中將autowire設置為by name,而該bean包含master屬性(同時提供setMaster(..)方法),Spring就會查找名為master的bean定義,并用它來裝配給master屬性。

    byType

    如果容器中存在一個與指定屬性類型相同的bean,那么將與該屬性自動裝配。如果存在多個該類型的bean,那么將會拋出異常,并指出不能使用byType方式進行自動裝配。若沒有找到相匹配的bean,則什么事都不發(fā)生,屬性也不會被設置。如果你不希望這樣,那么可以通過設置dependency-check="objects"讓Spring拋出異常。

    constructor

    byType的方式類似,不同之處在于它應用于構造器參數(shù)。如果在容器中沒有找到與構造器參數(shù)類型一致的bean,那么將會拋出異常。

    autodetect

    通過bean類的自省機制(introspection)來決定是使用constructor還是byType方式進行自動裝配。如果發(fā)現(xiàn)默認的構造器,那么將使用byType方式。


    步驟
    1,將application.xml分成兩個,一個文件里面管理的是系統(tǒng)基本信息的Bean管理,另一個文件是業(yè)務信息的Bean管理(當然,如果你覺得還不夠的話,可以將其按功能模塊進一步拆分)。
    拆分后當然需要更改web.xml中的配置,如下:
    ????<context-param>
    ????????
    <param-name>contextConfigLocation</param-name>
    ????????
    <param-value>classpath:applicationContext*.xml,classpath:xfire-servlet.xml</param-value>
    ????
    </context-param>

    2,使用byType的方式,對業(yè)務信息部分的Bean進行自動裝載,因為我Class中的有些屬性可能并不與XML配置中的名稱一致,所以想使用這樣的方式相對簡單,不需要去將屬性名和XML的Bean ID一一對應。配置如下:
    <beans?default-autowire="byType">

    </beans>

    來,啟動應用,試試看效果吧。正在我慶幸自己不用去比對名稱的時候,系統(tǒng)到如下階段時停住了。
    |INFO?|2008-09-02?22:56:50;206|org.springframework.orm.hibernate3.HibernateTransactionManager:org.springframework.orm.hibernate3.HibernateTransactionManager.afterPropertiesSet(371)|Using?DataSource?[org.apache.commons.dbcp.BasicDataSource@6da8eb]?of?Hibernate?SessionFactory?for?HibernateTransactionManager|
    此時我等了5分鐘,CPU一直被Javaw進程占用,使用率高達98%,目前還不知道為什么會這樣,也請各位不吝賜教。

    3,既然byType行不通,那就只能byName了,配置如下:
    <beans?default-autowire="byName">

    </beans>
    然后核對了一遍名稱。為了保險,我還是將每個功能都做了一下冒煙測試,幸好不多,只有二十個功能左右,果然有兩個“冒煙”的,檢查一下,發(fā)現(xiàn)是類里面的屬性名的大小寫不對,改正后,一切OK。

    成果
    1,項目業(yè)務模塊部分的Bean配置文件一下從原來的800多行變?yōu)?00多行,瘦身近50%。
    2,系統(tǒng)啟動時,縮短了XML校驗的時間,雖然時間每次縮小的很短,這對于調(diào)試來說,還是很值的,因為項目開發(fā)中所有調(diào)試的運行會有很多次,總量加起也不是個小數(shù)目。
    3,以后增加功能模塊時,就算是Copy以前的配置來改,也可以少改幾個地方。
    這筆買賣似乎還很值喲,^-^

    總結
    1,建議不要將所有Bean都設成自動裝載,而只用將業(yè)務相關的Bean設成自動裝載。
    2,如果你的項目中名稱使用很亂,沒有規(guī)范,那就不要用byName的自動裝載了。
    3,如果是重構時使用的自動裝載,一定要記得做冒煙測試。
    posted on 2008-09-02 23:27 Robin's Programming World 閱讀(1898) 評論(2)  編輯  收藏 所屬分類: Java

    評論:
    # re: Spring Autowire(自動裝載)的一次實踐[未登錄] 2008-09-08 22:58 | soleghost
    如果項目很小,autowrie倒無所謂,維護起來也不是很麻煩
    如果項目很大,代碼的可讀性下降了,反而增加維護的成本,不劃算的  回復  更多評論
      
    # re: Spring Autowire(自動裝載)的一次實踐 2008-09-09 09:49 | Robin's Java World
    @soleghost
    可讀性下降?這話從何說起?
    大的項目通常都要求有統(tǒng)一的編碼規(guī)范,而且這個與Autowire也沒有什么關系呀。
    請指教!  回復  更多評論
      
    主站蜘蛛池模板: 亚洲福利一区二区精品秒拍| 国产精品麻豆免费版| 亚洲人成亚洲精品| 国产在线播放线91免费 | 亚洲免费福利在线视频| 久久国产亚洲观看| 污污网站免费观看| 亚洲精品高清久久| 在免费jizzjizz在线播| 亚洲国产成人超福利久久精品| 99精品一区二区免费视频| 久久精品国产亚洲AV麻豆不卡 | 亚洲成a人无码av波多野按摩| 国产精品亚洲а∨天堂2021| 日韩亚洲国产综合久久久| eeuss草民免费| 亚洲精品中文字幕乱码三区| 免费播放在线日本感人片| 久久夜色精品国产噜噜噜亚洲AV | 亚洲日韩精品国产一区二区三区| 无码人妻精品一二三区免费| 亚洲av永久无码一区二区三区| 国产免费私拍一区二区三区| 抽搐一进一出gif免费视频| 亚洲AV午夜成人片| 成人AV免费网址在线观看| 亚洲国产精品无码久久98| 久久精品国产亚洲Aⅴ蜜臀色欲| 一级毛片视频免费观看| 亚洲欧洲日产国码无码网站 | 国产v片免费播放| 国产在线精品一区免费香蕉| 亚洲视频免费播放| 午夜成人免费视频| aaa毛片免费观看| 亚洲精品免费在线视频| 国产女高清在线看免费观看| 野花香高清在线观看视频播放免费 | 亚洲日韩AV一区二区三区中文| yy6080亚洲一级理论| 精品无码AV无码免费专区|