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

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

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

    隨筆 - 71  文章 - 15  trackbacks - 0
    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    因?yàn)榭诳剩系蹌?chuàng)造了水;
    因?yàn)楹诎担系蹌?chuàng)造了火;
    因?yàn)槲倚枰笥眩陨系圩屇銇淼轿疑磉?br> Click for Shaanxi xi'an, Shaanxi Forecast
    ╱◥█◣
      |田|田|
    ╬╬╬╬╬╬╬╬╬╬╬
    If only I have such a house!
    〖總在爬山 所以艱辛〗
    Email:myesjoy@yahoo.com.cn
    NickName:yesjoy
    MSN:myesjoy@hotmail.com
    QQ:150230516

    〖總在尋夢(mèng) 所以苦痛〗

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    Hibernate在線

    Java友情

    Java認(rèn)證

    linux經(jīng)典

    OA系統(tǒng)

    Spring在線

    Structs在線

    專家專欄

    企業(yè)信息化

    大型設(shè)備共享系統(tǒng)

    工作流

    工作流產(chǎn)品

    網(wǎng)上購書

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    1. Action接口:
    Action 接口定義了一個(gè)execute 方法,在我們示例中,不同的Action 實(shí)現(xiàn)提供了各自的
    execute方法,以完成目標(biāo)邏輯。
    public?interface?Action?{
    ??
    public?String?execute(String?str);
    }
    2. Action接口的兩個(gè)實(shí)現(xiàn)UpperAction、LowerAction
    public?class?UpperAction?implements?Action?{
    ?
    private?String?message;
    ?
    public?String?getMessage()?{
    ?
    return?message;
    ?}
    ?
    public?void?setMessage(String?string)?{
    ??message?
    =?string;
    ?}
    ?
    public?String?execute(String?str)?{
    ??
    return?(getMessage()?+?str).toUpperCase();
    ?}
    }
    UpperAction將其message屬性與輸入字符串相連接,并返回其大寫形式。
    public?class?LowerAction?implements?Action?{
    ?
    private?String?message;
    ?
    public?String?getMessage()?{
    ??
    return?message;
    ?}
    ?
    public?void?setMessage(String?string)?{
    ??message?
    =?string;
    ?}
    ?
    public?String?execute(String?str)?{
    ??
    return?(getMessage()+str).toLowerCase();
    ?}
    }
    LowerAction將其message屬性與輸入字符串相連接,并返回其小寫形式。
    3. Spring配置文件(bean.xml)
    <beans>
    <description>Spring?Quick?Start</description>
    <bean?id="TheAction"
    class
    ="net.xiaxin.spring.qs.UpperAction">
    <property?name="message">
    <value>HeLLo</value>
    </property>
    </bean>
    </beans>
    (請(qǐng)確保配置bean.xml位于工作路徑之下,注意工作路徑并不等同于CLASSPATH ,eclipse
    的默認(rèn)工作路徑為項(xiàng)目根路徑,也就是.project文件所在的目錄,而默認(rèn)輸出目錄/bin是項(xiàng)目
    CLASSPATH的一部分,并非工作路徑。)
    4. 測(cè)試代碼
    public?void?testQuickStart()?{
    ?ApplicationContext?ctx
    =new
    FileSystemXmlApplicationContext(
    "bean.xml");
    ?Action?action?
    =?(Action)?ctx.getBean("TheAction");
    ?System.out.println(action.execute(
    "Rod?Johnson"));
    }
    可以看到,上面的測(cè)試代碼中,我們根據(jù)"bean.xml"創(chuàng)建了一個(gè)ApplicationContext實(shí)
    例,并從此實(shí)例中獲取我們所需的Action實(shí)現(xiàn)。
    運(yùn)行測(cè)試代碼,我們看到控制臺(tái)輸出:
    ……
    HELLO?ROD?JOHNSON
    我們將bean.xml中的配置稍加修改:
    <bean?id="TheAction" class="net.xiaxin.spring.qs.LowerAction"/>
    再次運(yùn)行測(cè)試代碼,看到:
    ……
    hello?rod?johnson
    示例完成!
    很簡(jiǎn)單的示例,的確很簡(jiǎn)單,甚至簡(jiǎn)單到了不夠真實(shí)。不過,不知大家從這個(gè)最簡(jiǎn)單的例子中看出了什么?真的只是打印輸出了兩行不痛不癢的問候語?
    仔細(xì)觀察一下上面的代碼,可以看到:
    1. 我們的所有程序代碼中(除測(cè)試代碼之外),并沒有出現(xiàn)Spring中的任何組件。
    2. UpperAction和LowerAction的Message屬性均由Spring通過讀取配置文件(bean.xml)動(dòng)
    態(tài)設(shè)置。
    3. 客戶代碼(這里就是我們的測(cè)試代碼)僅僅面向接口編程,而無需知道實(shí)現(xiàn)類的具體名稱。同時(shí),
    我們可以很簡(jiǎn)單的通過修改配置文件來切換具體的底層實(shí)現(xiàn)類。
    上面所說的這些,對(duì)于我們的實(shí)際開發(fā)有何幫助?
    ? 首先,我們的組件并不需要實(shí)現(xiàn)框架指定的接口,因此可以輕松的將組件從Spring中脫離,甚至不需要任何修改(這在基于EJB框架實(shí)現(xiàn)的應(yīng)用中是難以想象的)。
    ? 其次,組件間的依賴關(guān)系減少,極大改善了代碼的可重用性。
    Spring的依賴注入機(jī)制,可以在運(yùn)行期為組件配置所需資源,而無需在編寫組件代碼時(shí)就加以指定,從而在相當(dāng)程度上降低了組件之間的耦合。
    上面的例子中,我們通過Spring,在運(yùn)行期動(dòng)態(tài)將字符串 “HeLLo” 注入到Action實(shí)現(xiàn)類的Message屬性中。
    現(xiàn)在假設(shè)我們回到傳統(tǒng)的實(shí)現(xiàn)模式,應(yīng)該如何處理?
    一般的處理辦法也就是編寫一個(gè)Helper類(輔助類),完成配置文件讀寫功能,然后在各個(gè)Action的構(gòu)造函數(shù)中,調(diào)用這個(gè)Helper類設(shè)置message屬性值。此時(shí),我們的組件就與這個(gè)Helper類庫建立了依賴關(guān)系,之后我們需要在其他系統(tǒng)中重用這個(gè)組件的話,也必須連同這個(gè)Helper類庫一并移植。實(shí)際開發(fā)中,依賴關(guān)系往往并非如此簡(jiǎn)單,組件與項(xiàng)目基層代碼之間復(fù)雜的關(guān)聯(lián),使得組件重用性大大下降。
    Spring通過依賴注入模式,將依賴關(guān)系從編碼中脫離出來,從而大大降低了組件之間的耦合,
    實(shí)現(xiàn)了組件真正意義上的即插即用。這也是Spring最具價(jià)值的特性之一。
    ? 面向接口編程。
    誠然,即使沒有Spring,實(shí)現(xiàn)面向接口的設(shè)計(jì)也不困難。Spring對(duì)于面向接口設(shè)計(jì)的意義,在于它為面向接口編程提供了一個(gè)更加自然的平臺(tái)。基于Spring開發(fā),程序員會(huì)自然而然傾向于使用接口來定義不同層次之間的關(guān)聯(lián)關(guān)系,這種自發(fā)的傾向性,來自于Spring所提供的簡(jiǎn)單舒適的依賴注入實(shí)現(xiàn)。Spring使得接口的定義和使用不再像傳統(tǒng)編碼過程中那么繁瑣(傳統(tǒng)編碼過程中,引入一個(gè)接口,往往也意味著同時(shí)要引入一個(gè)Factory類,也許還有一個(gè)額外的配置文件及其讀寫代碼)。
    posted on 2006-03-19 20:12 ★yesjoy★ 閱讀(326) 評(píng)論(0)  編輯  收藏 所屬分類: Structs學(xué)習(xí)
    主站蜘蛛池模板: 无码人妻一区二区三区免费| 叮咚影视在线观看免费完整版| AV无码免费永久在线观看| 亚洲午夜福利AV一区二区无码| 五级黄18以上免费看| 免费精品国产自产拍观看| 综合一区自拍亚洲综合图区| 国产jizzjizz视频免费看| 男女猛烈无遮掩视频免费软件 | 香蕉视频免费在线| 国产jizzjizz视频免费看| 一本岛v免费不卡一二三区| 久久精品亚洲福利| 久久免费动漫品精老司机| 亚洲美女激情视频| 毛片免费全部免费观看| 在线看亚洲十八禁网站| 亚洲一级Av无码毛片久久精品| a在线观看免费网址大全| 亚洲高清无在码在线电影不卡| 成视频年人黄网站免费视频| 亚洲爆乳成av人在线视菜奈实| 日批日出水久久亚洲精品tv| caoporm超免费公开视频| 久久亚洲私人国产精品| 青青久在线视频免费观看| 国产成人综合亚洲| 亚洲成色在线综合网站| 国产在线jyzzjyzz免费麻豆| 亚洲国产精品无码第一区二区三区| 亚洲 国产 图片| 久久国产色AV免费观看| 亚洲成AV人片在WWW| 亚洲毛片αv无线播放一区| 国产精品久久久久久久久免费| 精品国产日韩亚洲一区91| 国产v亚洲v天堂无码网站| 久久久久国产精品免费免费搜索 | 永久免费精品影视网站| 亚洲成色在线影院| 日韩精品视频免费网址|