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

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

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

    AOP,IOC,Spring

    Posted on 2005-06-01 14:11 李嵐 閱讀(815) 評論(0)  編輯  收藏 所屬分類: Java

    理解AOP

    我覺得面向?qū)ο蠛芎玫亟鉀Q了軟件系統(tǒng)中職責(zé)劃分的問題.借助于面向?qū)ο?軟件開發(fā)人員一般的,都可以將需求里的名詞轉(zhuǎn)換成系統(tǒng)中的對象,動詞轉(zhuǎn)換為對象里的方法.這樣非常符合人的思維方式,非常自然.


    但是,問題是某些需求卻偏偏不是能用這樣的”名詞”和”動詞”就能完美的描述出來的,假如這樣的問題:需要對系統(tǒng)中的某些方法進(jìn)行事務(wù)處理,這種需要事務(wù)代碼散布在多個類中.面對這種需求,應(yīng)該怎么辦呢?最直接的辦法就是:創(chuàng)建一個基類(接口)或者一個助手,將事務(wù)處理的功能放在其中,并讓所有需要事務(wù)功能的類繼承這個基類(接口)或者使用這個助手.加入這樣的.需要修改的地方就會分散在多個文件中.這樣大的修改量,無疑會增加出錯的幾率,并且加大系統(tǒng)維護(hù)的難度,如圖:

                                          1.jpg




    因此,面向方面的編程(
    Aspect Oriented Programming,AOP)應(yīng)運(yùn)而生.AOP為開發(fā)者提供了一種描述橫切關(guān)注點(diǎn)的機(jī)制,并能夠自動將橫切關(guān)注點(diǎn)織入到面向?qū)ο蟮能浖到y(tǒng)中,從而實(shí)現(xiàn)了橫切關(guān)注點(diǎn)的模塊化.通過劃分Aspect代碼,橫切關(guān)注點(diǎn)變得容易處理.開發(fā)者可以在編譯時更改,插入或除去系統(tǒng)的Aspect,甚至重用系統(tǒng)的Aspect.” OOP只用于表示對象之間的泛化-特化(generalization-specialization)關(guān)系(通過繼承來表現(xiàn)),而對象之間的橫向關(guān)聯(lián)則完全用AOP來表現(xiàn). 這樣,很多給對象之間橫向關(guān)聯(lián)增加靈活性的設(shè)計模式(例如Decorator)將不再必要.”,如圖:
                                           2.jpg

    Spring中的Ioc

    想一想以前在使用工廠模式的時候,在最早的情況下,每個工廠可能都是一個Singleton,生成對象的代碼被寫死在了類里面.后來人們覺這樣還是耦合程度太高,還不夠靈活.所以把對象的類名寫在一個XML文件里,這樣一來.問題又來了,每個工廠都有自己的讀取配置文件的代碼,通過讀取XML文件,或者通過讀取Properties,工廠里充滿了亂糟糟的和業(yè)務(wù)邏輯完全不相關(guān)的配置管理代碼,維護(hù)起來很不方便,.而Spring通過組件工廠把這些都集成在了一起,用一個統(tǒng)一的BeanFactory來管理這些配置,而且提供了更高一級的抽象:ApplicationContext

     

    Ioc好像很神奇的樣子,其實(shí)原理和實(shí)現(xiàn)都很簡單,就是將要使用的對象都用XML來定義,用反射來生成,用注射的方式來使用. 其實(shí)Ioc是工廠模式的升華,Ioc可以被看作是一個大工廠,只不過這個大工廠里要生成的對象都是在XML文件中給出定義的,然后利用Java“反射”編程,根據(jù)XML中給出的類名生成相應(yīng)的對象。從實(shí)現(xiàn)來看,Ioc是把以前在工廠方法里寫死的對象生成代碼,改變?yōu)橛?/SPAN>XML文件來定義,也就是把工廠和對象生成這兩者獨(dú)立分隔開來,目的就是提高靈活性和可維護(hù)性。

    Template Method和回調(diào)在框架中的使用

    Template模式主要是用來解決這樣的一個問題:當(dāng)你知道算法的具體步驟,但不知道如何去執(zhí)行這些步驟.Template把如何執(zhí)行這些步驟的方法都封裝成抽象的函數(shù),并且提供一個正確的順序去執(zhí)行這些步驟,而具體子類實(shí)現(xiàn)這些處理各個步驟的抽象方法.

     

    業(yè)務(wù)邏輯抽象到超類集中化就是所謂的”控制反轉(zhuǎn)”了.在傳統(tǒng)的類庫中,一般是由客戶端來調(diào)用類庫里的方法.而在這里,卻是框架控制了用戶流程,具體的子類只是要求履行一個明確的契約.在Spring中的MVC框架里,jdbc包里.都大量的使用了Template模式.

     

    Java中的回調(diào)函數(shù)主要是在實(shí)現(xiàn)事件驅(qū)動模型的時候使用的,但是在Spring里面,回調(diào)被賦予了新的意義:通過回調(diào)接口(函數(shù))來實(shí)現(xiàn)可擴(kuò)展性.如jdbc包的RowcallbackHandler.


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    posts - 7, comments - 23, trackbacks - 0, articles - 0

    Copyright © 李嵐

    主站蜘蛛池模板: 免费无码又爽又刺激网站| 国产精品亚洲а∨无码播放麻豆| 国产免费网站看v片在线| 亚洲免费日韩无码系列| 无人视频免费观看免费视频| 亚洲AⅤ视频一区二区三区| 国产偷国产偷亚洲高清人| 国产成人无码a区在线观看视频免费 | 热久久这里是精品6免费观看| 2048亚洲精品国产| www一区二区www免费| 国产国拍亚洲精品mv在线观看| 国内精品免费在线观看| 91在线精品亚洲一区二区| 久视频精品免费观看99| 亚洲欧洲日韩极速播放| 日本免费一区二区三区最新| 无码免费又爽又高潮喷水的视频 | 免费看国产一级特黄aa大片| 日日躁狠狠躁狠狠爱免费视频| 国产日韩成人亚洲丁香婷婷| 国产羞羞的视频在线观看免费| 久久亚洲AV成人无码国产| 性做久久久久久免费观看| 亚洲av无码有乱码在线观看| 亚洲精品成人a在线观看| 美女被cao网站免费看在线看| 亚洲精品在线播放视频| 日韩一区二区免费视频| 成人片黄网站色大片免费观看cn | 91免费人成网站在线观看18| 亚洲一线产品二线产品| 亚洲最大激情中文字幕| 亚欧免费视频一区二区三区| 狼人大香伊蕉国产WWW亚洲| 亚洲国产精品嫩草影院在线观看| 青苹果乐园免费高清在线| 一级黄色毛片免费看| 亚洲人色大成年网站在线观看| 国产一区二区三区免费在线观看| a级片免费观看视频|