亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

Spring XML配置的12個技巧

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

          SPRing是一個強有力的java程序框架,其被廣泛應用于java的程序中。它用POJO提供了企業級服務。Spring利用依靠注入可以獲得簡單而有效的測試能力。Spring beans,依靠關系,以及服務所需要的bean都將在配置文件中予以描述,配置文件一般采用xml格式。然而XML配置文件冗長而不易使用,在你進行一個使用了大量bean的大項目中它將變得難以閱讀和控制。

 

在這篇文章中我將給你展示12種的有關Spring XML配置文件的最佳技巧。它們中的一些具有更多的實際意義,而不僅是最好的技巧。請注重另外一些因素,例如域模型的設計,會影響到XML配置,但是這篇文章更關注于XML配置的可讀性和可操控性。

 

1. 避免使用自動裝配

Spring可以通過bean類的自省來實現自動裝配依靠,這樣的話你就不必明確地描述bean的屬性或者構造函數的參數。根據屬性名稱活匹配類型,bean屬性可以自動進行裝配。而構造函數可以根據匹配類型自動裝配。你甚至可以設置自動裝配進行自動偵測,這樣Spring替你就會選擇一個合適的機制。請看下面的例子:

 

 

Spring可以通過bean類的自省來實現自動裝配依靠,這樣的話你就不必明確地描述bean的屬性或者構造函數的參數。根據屬性名稱活匹配類型,bean屬性可以自動進行裝配。而構造函數可以根據匹配類型自動裝配。你甚至可以設置自動裝配進行自動偵測,這樣Spring替你就會選擇一個合適的機制。請看下面的例子:

 

    <bean id="orderService"

        class="com.lizjason.spring.OrderService"

        autowire="byName"/>

 

OrderService類的屬性名被用來和容器中的一個bean實例進行匹配。自動裝配會默默的保存一些類型信息并降低混亂。然而,由于它會犧牲掉這種配置的直觀性和可維護性,你在實際的項目中將不會用到它。許多指南和陳述材料都把它吹捧為Spring的一個非常cool的特性,而沒有提到它的這個缺點。依我之見,就像Spring的對象池一樣,它更多了一些商業味道。它看起來似乎可以使XML配置文件更精簡一些,但實際上卻增加其復雜性,尤其是在你的較大規模的工程中已經定義了很多bean的時候更是如此。Spring答應你混合使用自動和手動裝配,但是這種矛盾會使XML配置更加的令人費解。

 

2. 使用命名規范

和Java編碼的理念一樣,在項目中始終用清楚的,描述性的,一致的命名規范對開發人員理解XML配置非常有用。拿bean ID舉例來說,你可以遵循Java類中屬性的命名規范。比如說,OrderServiceDAO的bean ID應該是orderServiceDAO。對于大項目來說,在bean ID前加包名來作為前綴。

 

3. 使用簡化格式

簡化格式有利于減少冗余,因為它把屬性值和引用作為屬性,而不是子元素??聪旅娴睦樱?/P>

    <bean id="orderService"
        class="com.lizjason.spring.OrderService">
        <property name="companyName">
            <value>lizjason</value>
        </property>
        <constrUCtor-arg>
            <ref bean="orderDAO">
        </constructor-arg>
    </bean>

以上程序可以重新以簡化格式書寫為:

    <bean id="orderService"
        class="com.lizjason.spring.OrderService">
        <property name="companyName"
            value="lizjason"/>
        <constructor-arg ref="orderDAO"/>
    </bean>

簡化格式在1.2版本時已經可用了,但請注重不存在<ref local="...">這種簡化格式不僅可以較少你的代碼輸入量,而且可以使XML配置更加的清楚。當你的配置文件中存在大量的bean定義時,它可以顯著地提高可讀性。

 

4. 盡量使用type而不是index去解決構造函數參數的匹配問題

當構造函數中有多個同類型的參數時,Spring只答應你使用從0開始的index或者value標簽來解決這個問題。請看下面的例子:

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

最好用type屬性取代上面的做法:

    <bean id="billingService"
        class="com.lizjason.spring.BillingService">
        <constructor-arg type="java.lang.String"
            value="lizjason"/>
        <constructor-arg type="int" value="100"/>
    </bean>

 

用index可以稍微減少冗余,但是它更輕易出錯且不如type屬性可讀性高。你應該僅在構造函數中有參數沖突時使用index。

 

5. 如可能,盡量復用bean定義

Spring提供了一種類似于繼續的機制來降低配置信息的重復并使XML配置更加的簡單。一個子bean可以從它的父bean繼續配置信息,本質上這個父bean就像它的子bean的一個模板。這是一個在大型項目中必須使用的特性。所有你要做的就是把父bean的abstract屬性置為true,并在子bean中加以引用。例如:

    <bean id="abstractService" abstract="true"
        class="com.lizjason.spring.AbstractService">
        <property name="companyName"
            value="lizjason"/>
    </bean>
 
    <bean id="sh
        parent="abstractService"
        class="com.lizjason.spring.ShippingService">
        <property name="shippedBy" value="lizjason"/>
    </bean>

shippingService bean繼續了abstractService bean的屬性companyName的值lizjason。注重,假如你為bean聲名一個class或工廠方法,這個bean將會默認為abstract

 

6. 盡量使用applicationContext裝配bean,而不是用import

像Ant腳本中imports一樣,Spring的import 元素對于模塊化bean的裝配非常有用,例如:

    <beans>
        <import resource="billingServices.xml"/>
        <import resource="shippingServices.xml"/>
        <bean id="orderService"
            class="com.lizjason.spring.OrderService"/>
    <beans>

然而,比起在XML中用imports預裝配這些bean,利用ApplicationContext來配置它們將更加靈活,也可以使XML配置更加的易于治理。你可以像下面這樣傳遞一個bean定義數組到ApplicationContext的構造函數中:

    String[] serviceResources =

        {"orderServices.xml",

        "billingServices.xml",

        "shippingServices.xml"};

ApplicationContext orderServiceContext = new

ClassPathXmlApplicationContext(serviceResources);

 

7. 用id來標識bean

你可以用id或名字作為bean的標識。用id可讀性較差,但是它可以影響XML分析器使bean的reference有效。假如id由于XML IDREF約束而無法使用,你可以用name作為bean的標識。XML IDREF約束是指id必須以字母開始(或者是在XML聲名了的一個標點符號),后面可以是字母,數字,連字符,下劃線,冒號或full stops(不知道怎么翻譯好)。在實際應用中很少會碰到XML IDREF約束問題。

 

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

你可以為bean的dependency-check屬性設置一個值來取代默認的none,比如說simple,objects或者all,這樣的話容器將替你做依靠有效性的檢查。當一個bean的所有屬性(或者某些屬性目錄)都被明確設置,或利用自動裝配時將會非常有用。

    <bean id="orderService"
        class="com.lizjason.spring.OrderService"
        dependency-check="objects">
        <property name="companyName"
            value="lizjason"/>
        <constructor-arg ref="orderDAO"/>
    </bean>

在這個例子中,容器將確保這些屬性不是privitives或者保證collections是為orderService bean設置的。為所有的bean設置默認的依靠檢查是可能的,但這個特性由于有些bean的屬性不需要設置而很少使用。

 

9. 為每個配置文件加一個描述注釋

在XML配置文件中最好使用有描述性的id和name,而不是成堆的注釋。另外,加一個文件描述頭將會非常有用,這個描述可以概括文件中定義的bean。另一個選擇,你可以在description元素中加入描述信息。例如:

    <beans>
        <description>
            This file defines billing service
            related beans and it depends on
            baseServices.xml,which provides
            service bean templates...
        </description>
        ...
    </beans>

用description元素的一個好處就是工具可以很輕易的把描述信息從這個元素中提取出來。

 

10.   和team members溝通變更

當你修改java源碼后,要確保更改了配置文件中的相應部分并把這個情況告知你的team members。XML配置文件也是代碼,它們是程序的重要組成部分,但它們很難閱讀和維護。大多數時間里,你需要同時看XML配置文件和java代碼才能知道是怎么回事。

 

11.   setter注入和構造函數注入,優先使用前者

Spring提供了三種注入方式:構造函數注入,setter注入和方法注入。一般我們使用前兩種。

    <bean id="orderService"
        class="com.lizjason.spring.OrderService">
        <constructor-arg ref="orderDAO"/>
    </bean>
 
    <bean id="billingService"
        class="com.lizjason.spring.BillingService">
        <property name="billingDAO"
            ref="billingDAO">
    </bean>

在這個例子中,orderService bean用了構造函數注入,而BillingService bean用了setter注入。構造函數注入可以確保bean正確地構建,但是setter注入更加的靈活和易于控制,非凡是當class有多個屬性并且它們中的一些是可選的情況是更是如此。

 

12.   不要濫用注入

就像前面提到的,Spring的ApplicationContext可以替你創建java對象,但不是所有的java對象都應該通過注入創建。例如,域對象就不應該通過ApplicationContext創建。Spring是一個優秀的框架,但是考慮到可讀性和可操控性,基于XML配置的配置會在定義很多bean的時候出現麻煩。過渡使用依靠注入將會使XML配置更加的復雜和冗長。切記,當使用高效的IDE時,例如Eclipse and IntelliJ,java代碼更加的易于閱讀,維護和治理比使XML文件

 

結論

XML是Spring流行的配置格式。存在大量bean定義時,基于XML的配置會變得冗長而不易使用。Spring提供了豐富的配置選項。適當地使用這些選項可以使XML配置更加的清楚,但其它的一些選項,例如自動裝配,可能會降低可讀性和可維護性。參考本文中提到的這些技巧可能會幫助你創建干凈而易讀的XML配置文件 



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
青青草国产精品一区二区| 国产精品久久一区主播| 欧美视频专区一二在线观看| 国产成人高潮免费观看精品| 精品国产自在精品国产浪潮| 欧美激情videos| 日韩精品www| 青青久久av北条麻妃海外网| 韩日欧美一区二区| 亚洲精品国产品国语在线| 欧美放荡办公室videos4k| 久久免费视频观看| 国产精品综合久久久| 国产精品1区2区在线观看| 久久久久久久国产精品| 成人疯狂猛交xxx| 免费91麻豆精品国产自产在线观看| 欧美一级免费视频| 欧美日韩免费在线观看| 亚洲人a成www在线影院| 欧美在线视频一区| 国产美女直播视频一区| 热久久免费国产视频| 欧美精品在线看| 中文日韩在线视频| 一本大道亚洲视频| 欧美日韩在线视频一区二区| 日韩欧美精品网站| 久久久久国产精品一区| 97成人精品视频在线观看| 国产一区二区三区网站| 中文字幕一区电影| 精品国产91乱高清在线观看| 日韩av在线精品| 亚洲自拍偷拍在线| 国产精品欧美日韩一区二区| 久久av中文字幕| 在线观看91久久久久久| 欧美精品久久一区二区| 亚洲一区美女视频在线观看免费| 国产精品毛片a∨一区二区三区|国| 欧美裸体男粗大视频在线观看| 日韩美女主播视频| 国产精品扒开腿做爽爽爽视频| 欧美一级免费看| 亚洲视屏在线播放| 欧美性在线视频| 欧美精品福利在线| 精品国产91久久久久久老师| 国产精品视频久久久| 欧美精品videosex性欧美| 亚洲欧美三级伦理| 欧美亚洲国产成人精品| 亚洲最大福利视频网| 狠狠干狠狠久久| 国产日韩在线看| 黄色一区二区在线| 国产精品91在线| 疯狂做受xxxx欧美肥白少妇| 欧美人成在线视频| 色综合亚洲精品激情狠狠| 亚洲欧洲日韩国产| 日韩视频欧美视频| 欧美激情视频免费观看| 国产欧美最新羞羞视频在线观看| 91精品国产乱码久久久久久久久| 最近中文字幕mv在线一区二区三区四区| 亚洲第一色中文字幕| 中文字幕欧美视频在线| 欧美中文字幕视频| 91久久久久久久一区二区| 色综合男人天堂| 久久人人爽人人爽爽久久| 欧美性猛交xxxx乱大交3| 中文字幕日韩欧美在线| 91在线无精精品一区二区| 高清在线视频日韩欧美| 亚洲一区亚洲二区亚洲三区| 国产精品高潮粉嫩av| 亚洲黄色www| 日韩电影免费在线观看| 国产精品日韩专区| 国内免费久久久久久久久久久| 久久久久久12| 国产网站欧美日韩免费精品在线观看| 97在线精品国自产拍中文| 日韩欧美亚洲国产一区| 久久久天堂国产精品女人| 国产精品美女免费| 这里只有精品视频| 国产精品日本精品| 亚洲欧美日韩在线一区| 欧美成人中文字幕| 国产精品91久久久| 高清一区二区三区四区五区| 色偷偷偷综合中文字幕;dd| 中文字幕日韩在线观看| 91精品国产色综合久久不卡98口| 91超碰caoporn97人人| 欧美亚洲在线播放| 欧美日韩国产中字| 91久久久久久久久久久| www.日韩欧美| 九色91av视频| 96pao国产成视频永久免费| 日韩在线中文字| 亚洲天堂男人天堂| 美女扒开尿口让男人操亚洲视频网站| 精品国产成人在线| 亚洲自拍偷拍第一页| 欧美日韩激情美女| 欧美日韩中文字幕日韩欧美| 亚洲精品成a人在线观看| 中国china体内裑精亚洲片| 亚洲国产成人精品电影| 日韩欧美在线国产| 亚洲国产精品福利| 国产亚洲免费的视频看| 国语自产偷拍精品视频偷| 国产美女91呻吟求| 在线视频日本亚洲性| 2020欧美日韩在线视频| 国模叶桐国产精品一区| 91精品中国老女人| 亚洲三级av在线| 亚洲欧洲一区二区三区久久| 色偷偷偷综合中文字幕;dd| 九色精品美女在线| 日韩欧美aaa| 51色欧美片视频在线观看| 亚洲天天在线日亚洲洲精| 欧美精品videossex性护士| www.亚洲人.com| 久久久久久久影视| 久久久久久av| 国产午夜精品全部视频在线播放| 国产精品老牛影院在线观看| 国产精品高清免费在线观看| 欧美性猛交xxxx乱大交极品| 一区二区三区 在线观看视| 亚洲第一国产精品| 欧美极品美女电影一区| 色无极亚洲影院| 国产精品福利无圣光在线一区| 成人亲热视频网站| 国产精品久久久久久影视| 成人黄色在线免费| 亚洲成人久久电影| 欧美日韩国产va另类| 国产精品视频久久久久| 九九视频直播综合网| 中文字幕亚洲欧美日韩在线不卡| 亚洲毛片在线观看| 国产91色在线播放| 久久福利视频网| 亚洲日本中文字幕免费在线不卡| 韩日欧美一区二区| 国产精品电影久久久久电影网| 精品无人区太爽高潮在线播放| 国产精品毛片a∨一区二区三区|国| 欧美中文字幕在线视频| 最新国产精品亚洲| 日韩欧美综合在线视频| 欧美在线视频网|