posts - 0, comments - 77, trackbacks - 0, articles - 356
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          關(guān)于spring中的aop的解釋

          Posted on 2007-09-07 15:58 semovy 閱讀(334) 評(píng)論(1)  編輯  收藏 所屬分類: spring

          AOP是OOP的延續(xù),是Aspect   Oriented   Programming的縮寫,意思是面向方面編程。AOP實(shí)際是GoF設(shè)計(jì)模式的延續(xù),設(shè)計(jì)模式孜孜不倦追求的是調(diào)用者和被調(diào)用者之間的解耦,AOP可以說(shuō)也是這種目標(biāo)的一種實(shí)現(xiàn)。

               舉例:假設(shè)有在一個(gè)應(yīng)用系統(tǒng)中,有一個(gè)共享的數(shù)據(jù)必須被并發(fā)同時(shí)訪問(wèn),首先,將這個(gè)數(shù)據(jù)封裝在數(shù)據(jù)對(duì)象中,稱為Data   Class,同時(shí),將有多個(gè)訪問(wèn)類,專門用于在同一時(shí)刻訪問(wèn)這同一個(gè)數(shù)據(jù)對(duì)象。
            為了完成上述并發(fā)訪問(wèn)同一資源的功能,需要引入鎖Lock的概念,也就是說(shuō),某個(gè)時(shí)刻,當(dāng)有一個(gè)訪問(wèn)類訪問(wèn)這個(gè)數(shù)據(jù)對(duì)象時(shí),這個(gè)數(shù)據(jù)對(duì)象必須上鎖Locked,用完后就立即解鎖unLocked,再供其它訪問(wèn)類訪問(wèn)。
            使用傳統(tǒng)的編程習(xí)慣,我們會(huì)創(chuàng)建一個(gè)抽象類,所有的訪問(wèn)類繼承這個(gè)抽象父類,如下:
          abstract   class   Worker{
            abstract   void   locked();
            abstract   void   accessDataObject();
            abstract   void   unlocked();
          }

           缺點(diǎn):

                  *   accessDataObject()方法需要有“鎖”狀態(tài)之類的相關(guān)代碼。
                  *   Java只提供了單繼承,因此具體訪問(wèn)類只能繼承這個(gè)父類,如果具體訪問(wèn)類還要繼承其它父類,比如另外一個(gè)如Worker的父類,將無(wú)法方便實(shí)現(xiàn)。
                  *   重用被打折扣,具體訪問(wèn)類因?yàn)橐舶?#8220;鎖”狀態(tài)之類的相關(guān)代碼,只能被重用在相關(guān)有“鎖”的場(chǎng)合,重用范圍很窄。

                      仔細(xì)研究這個(gè)應(yīng)用的“鎖”,它其實(shí)有下列特性:
                  *   “鎖”功能不是具體訪問(wèn)類的首要或主要功能,訪問(wèn)類主要功能是訪問(wèn)數(shù)據(jù)對(duì)象,例如讀取數(shù)據(jù)或更改動(dòng)作。  

          “鎖”行為其實(shí)是和具體訪問(wèn)類的主要功能可以獨(dú)立、區(qū)分開(kāi)來(lái)的

          “鎖”功能其實(shí)是這個(gè)系統(tǒng)的一個(gè)縱向切面,涉及許多類、許多類的方法。  

           因此,一個(gè)新的程序結(jié)構(gòu)應(yīng)該是關(guān)注系統(tǒng)的縱向切面,例如這個(gè)應(yīng)用的“鎖”功能,這個(gè)新的程序結(jié)構(gòu)就是aspect(方面)
            在這個(gè)應(yīng)用中,“鎖”方面(aspect)應(yīng)該有以下職責(zé):
            提供一些必備的功能,對(duì)被訪問(wèn)對(duì)象實(shí)現(xiàn)加鎖或解鎖功能。以保證所有在修改數(shù)據(jù)對(duì)象的操作之前能夠調(diào)用lock()加鎖,在它使用完成后,調(diào)用unlock()解鎖。
          AOP應(yīng)用范圍

            很明顯,AOP非常適合開(kāi)發(fā)J2EE容器服務(wù)器,目前JBoss   4.0正是使用AOP框架進(jìn)行開(kāi)發(fā)。
            具體功能如下:
          Authentication   權(quán)限
          Caching   緩存
          Context   passing   內(nèi)容傳遞
          Error   handling   錯(cuò)誤處理
          Lazy   loading 懶加載
          Debugging  調(diào)試
          logging,   tracing,   profiling   and   monitoring 記錄跟蹤 優(yōu)化 校準(zhǔn)


          Performance   optimization 性能優(yōu)化
          Persistence  持久化
          Resource   pooling 資源池
          Synchronization 同步
          Transactions   事務(wù)
          AOP有必要嗎?
            當(dāng)然,上述應(yīng)用范例在沒(méi)有使用AOP情況下,也得到了解決,例如JBoss   3.XXX也提供了上述應(yīng)用功能,但是沒(méi)有使用AOP。
            但是,使用AOP可以讓我們從一個(gè)更高的抽象概念來(lái)理解軟件系統(tǒng),AOP也許提供一種有價(jià)值的工具。可以這么說(shuō):因?yàn)槭褂肁OP結(jié)構(gòu),現(xiàn)在JBoss   4.0的源碼要比JBoss   3.X容易理解多了,這對(duì)于一個(gè)大型復(fù)雜系統(tǒng)來(lái)說(shuō)是非常重要的。
            從另外一個(gè)方面說(shuō),好像不是所有的人都需要關(guān)心AOP,它可能是一種架構(gòu)設(shè)計(jì)的選擇,如果選擇J2EE系統(tǒng),AOP關(guān)注的上述通用方面都已經(jīng)被J2EE容器實(shí)現(xiàn)了,J2EE應(yīng)用系統(tǒng)開(kāi)發(fā)者可能需要更多地關(guān)注行業(yè)應(yīng)用方面aspect。


          評(píng)論

          # re: AOP的應(yīng)用層面  回復(fù)  更多評(píng)論   

          2007-09-16 13:56 by 葉偉
          AOP的應(yīng)用層面?有誰(shuí)具體的說(shuō)說(shuō)嗎
          主站蜘蛛池模板: 保康县| 兴安县| 桐柏县| 通道| 侯马市| 兴宁市| 松桃| 隆德县| 东乡族自治县| 河间市| 潜山县| 崇文区| 托克逊县| 通渭县| 观塘区| 新丰县| 建水县| 衡南县| 文登市| 隆化县| 桃江县| 车险| 璧山县| 桓台县| 日土县| 万安县| 梁河县| 富川| 二连浩特市| 县级市| 绥棱县| 夏邑县| 宣威市| 久治县| 五台县| 辽宁省| 绍兴县| 长宁区| 锡林郭勒盟| 舒城县| 泽州县|