丄諦啲仇魜ヤ
          如 果 敵 人 讓 你 生 氣 , 那 說(shuō) 明 你 沒(méi) 有 勝 他 的 把 握!
          posts - 6,comments - 56,trackbacks - 1

          AOP全名為Aspect-Oriented Programming,有關(guān)于AOP的許多名詞術(shù)語(yǔ)都過(guò)于抽象,單從字面上并不容易理解其名詞意義,這邊將以之前介紹代理機(jī)制的范例來(lái)逐一對(duì)照以介紹AOP的術(shù)語(yǔ)與觀念:

          • <!--[if !supportLists]-->Cross-cutting concern

          DynamicProxyDemo項(xiàng)目的例子中,記錄的動(dòng)作原先被橫切(Cross-cutting)入至HelloSpeaker本身所負(fù)責(zé)的業(yè)務(wù)流程之中,另外類似于記錄這類的動(dòng)作,如安全(Security)檢查、事務(wù)(Transaction)等系統(tǒng)層面的服務(wù)(Service),在一些應(yīng)用程序之中常被見(jiàn)到安插至各個(gè)對(duì)象的處理流程之中,這些動(dòng)作在AOP的術(shù)語(yǔ)中被稱之為Cross-cutting concerns
           

          以圖片說(shuō)明可強(qiáng)調(diào)出Cross-cutting concerns的意涵,例如原來(lái)的業(yè)務(wù)流程是很單純的:



          現(xiàn)在為了要加入記錄(Logging)與安全(Security)檢查等服務(wù),對(duì)象的程序代碼中若被硬生生的寫入相關(guān)的LoggingSecurity程序片段,則可使用以下圖解表示出Cross-cuttingCross-cutting concerns的概念:



          Cross-cutting concerns若直接撰寫在負(fù)責(zé)某業(yè)務(wù)的對(duì)象之流程中,會(huì)使得維護(hù)程序的成本增高,例如若您今天要將對(duì)象中的記錄功能修改或是移除該服務(wù),則必須修改所有撰寫曾記錄服務(wù)的程序代碼,然后重新編譯,另一方面,Cross-cutting concerns混雜于業(yè)務(wù)邏輯之中,使得業(yè)務(wù)對(duì)象本身的邏輯或程序的撰寫更為復(fù)雜。

          •   <!--[endif]-->Aspect

          將散落于各個(gè)業(yè)務(wù)對(duì)象之中的Cross-cutting concerns收集起來(lái),設(shè)計(jì)各個(gè)獨(dú)立可重用的對(duì)象,這些對(duì)象稱之為Aspect,例如在DynamicProxyDemo項(xiàng)目中將登錄的動(dòng)作設(shè)計(jì)為一個(gè)LogHandler類別,LogHandler類別在AOP的術(shù)語(yǔ)就是Aspect的一個(gè)具體實(shí)例,在AOP中著重于Aspect的辨認(rèn),將之從業(yè)務(wù)流程中獨(dú)立出來(lái),在需要該服務(wù)的時(shí)候,縫合(Weave至應(yīng)用程序之上,不需要服務(wù)的時(shí)候,也可以馬上從應(yīng)用程序中脫離,應(yīng)用程序中的可重用組件不用作任何的修改,例如在DynamicProxyDemo項(xiàng)目中的HelloSpeaker所代表的角色就是應(yīng)用程序中可重用的組件,在它需要記錄服務(wù)時(shí)并不用修改本身的程序代碼。

          另一方面,對(duì)于應(yīng)用程序中可重用的組件來(lái)說(shuō),以AOP的設(shè)計(jì)方式,它不用知道處理提供服務(wù)的對(duì)象之存在,具體的說(shuō),與服務(wù)相關(guān)的API不會(huì)出現(xiàn)在可重用的應(yīng)用程序組件之中,因而可提高這些組件的重用性,您可以將這些組件應(yīng)用至其它的應(yīng)用程序之中,而不會(huì)因?yàn)槟壳凹尤肓四承┓?wù)而與目前的應(yīng)用程序框架發(fā)生耦合。

          • <!--[if !supportLists]-->Advice

          Aspect的具體實(shí)作稱之為Advice,以記錄的動(dòng)作而言,Advice中會(huì)包括真正的記錄程序代碼是如何實(shí)作的,像是DynamicProxyDemo項(xiàng)目中的LogHandler類別就是Advice的一個(gè)具體實(shí)例,Advice中包括了Cross-cutting concerns的行為或所要提供的服務(wù)。 

          • <!--[if !supportLists]-->Joinpoint

          Aspect在應(yīng)用程序執(zhí)行時(shí)加入業(yè)務(wù)流程的點(diǎn)或時(shí)機(jī)稱之為Joinpoint,具體來(lái)說(shuō),就是Advice在應(yīng)用程序中被呼叫執(zhí)行的時(shí)機(jī),這個(gè)時(shí)機(jī)可能是某個(gè)方法被呼叫之前或之后(或兩者都有),或是某個(gè)例外發(fā)生的時(shí)候。

          • <!--[if !supportLists]--><!--[endif]-->Pointcut

          Pointcut是一個(gè)定義,藉由這個(gè)定義您可以指定某個(gè)Aspect在哪些Joinpoint時(shí)被應(yīng)用至應(yīng)用程序之上。具體的說(shuō),您可以在某個(gè)定義檔中撰寫Pointcut,當(dāng)中說(shuō)明了哪些Aspect要應(yīng)用至應(yīng)用程序中的哪些Joinpoint 

          • <!--[if !supportLists]-->Target

          一個(gè)Advice被應(yīng)用的對(duì)象或目標(biāo)對(duì)象,例如DynamicProxyDemo項(xiàng)目中的HelloSpeaker就是LogHandler這個(gè)AdviceTarget

          • <!--[if !supportLists]--><!--[endif]-->Introduction

          對(duì)于一個(gè)現(xiàn)存的類別,Introduction可以為其增加行為,而不用修改該類別的程序,具體的說(shuō),您可以為某個(gè)已撰寫、編譯完成的類別,在執(zhí)行時(shí)期動(dòng)態(tài)加入一些方法或行為,而不用修改或新增任何一行程序代碼。

          • <!--[if !supportLists]--><!--[endif]-->Proxy

          Expert One-on-One J2EE Development WIthout EJB一書(shū)中,Rod JohnsonJuergen Hoeller在第八章中有提到,AOP的實(shí)作有五個(gè)主要的策略:Dynamic ProxiesDynamic Byte Code GenerationJava Code GenerationUse of a Custon Class LoaderLanguage Extensions

          在之前靜態(tài)代理與動(dòng)態(tài)代理中,已經(jīng)使用實(shí)際的程序范例介紹過(guò)代理機(jī)制的實(shí)現(xiàn),SpringAOP主要是透過(guò)動(dòng)態(tài)代理來(lái)完成。

          • <!--[if !supportLists]-->Weave

          Advice被應(yīng)用至對(duì)象之上的過(guò)程稱之為縫合(Weave),在AOP中縫合的方式有幾個(gè)時(shí)間點(diǎn):編譯時(shí)期(Compile time)、類別加載時(shí)期(Classload time)、執(zhí)行時(shí)期(Runtime)。
           

          結(jié)合DynamicProxyDemo的實(shí)例,將以上介紹過(guò)的AOP相關(guān)名詞具體的使用圖片來(lái)加以表示,有助于您對(duì)每一個(gè)名詞的理解與認(rèn)識(shí):

          posted on 2007-09-13 19:33 Crying 閱讀(358) 評(píng)論(2)  編輯  收藏 所屬分類: spring

          FeedBack:
          # re: AOP觀念(轉(zhuǎn)載)
          2007-09-16 11:07 | Crying
          IOC 個(gè)人理解
          從字面意思來(lái)說(shuō)是控制反轉(zhuǎn),利用依賴注入模式將原來(lái)組件依賴于對(duì)象的關(guān)系,改變成組件依賴于抽象接口,將應(yīng)用程序依賴于容器變成容器管理應(yīng)用程序。為了調(diào)用IOC容器,組件必須利用BeanFactory或ApplicationContext,利用他們可以管理容器中的Bean實(shí)例的生命周期,用getBean(String ...)方法得到Bean實(shí)例,ApplicationContext在BeanFactory的基礎(chǔ)之上實(shí)現(xiàn)了擴(kuò)展增加了資源取得,消息解析,事件處理等功能,使得Spring的IOC容器來(lái)協(xié)調(diào)各組件間相互的依賴關(guān)系。
          http://www.itisedu.com/phrase/200603091205485.html



            回復(fù)  更多評(píng)論
            
          # re: AOP觀念(轉(zhuǎn)載)
          2007-09-16 11:50 | Crying
          AOP對(duì)我來(lái)說(shuō)到現(xiàn)在還沒(méi)真正的理解,昨天晚上又把《Spring開(kāi)發(fā) 手冊(cè)》和《精通Spring》的AOP部分看了哈可是還是云里霧里的,要是叫我說(shuō)出AOP的思想我肯定打哽心里是明白會(huì)用,可就是說(shuō)不上來(lái)(丟人了....).。
          我現(xiàn)在就把我所能說(shuō)的都說(shuō)出來(lái)啊,說(shuō)的不對(duì)大家別罵我,要是能對(duì)AOP有很好理解的麻煩給我留個(gè)言,給小弟帶來(lái)點(diǎn)感悟。。。先謝謝啦。
          我認(rèn)為AOP的實(shí)現(xiàn)其實(shí)就是靠的就是代理Bean(PoxyFactoryBean)和攔截器(Interceptor)來(lái)實(shí)現(xiàn)的。
          AOP中有幾個(gè)關(guān)鍵字Aspect,advice,pointCut,target,......
          Aspect 就是將你想往目標(biāo)對(duì)象中插入的東西(如事務(wù),日志),將這些日志,事務(wù)封裝成一個(gè)類也就成了Aspect了。
          advice 是可是說(shuō)是Aspect中的一個(gè)方法吧。
          pointCut 是目標(biāo)對(duì)象中的一個(gè)方法,也就是你想在目標(biāo)對(duì)像的哪個(gè)位置織入你 的Advice。
          target 就是你的目標(biāo)對(duì)象啦

          Spring AOP  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 兴山县| 桂林市| 蒲江县| 银川市| 阳东县| 白朗县| 中山市| 安阳县| 嵊州市| 浦江县| 景东| 油尖旺区| 潞西市| 临湘市| 巴林左旗| 万安县| 焉耆| 潞城市| 拉萨市| 淮安市| 灵武市| 绥滨县| 邹平县| 马边| 黑河市| 延长县| 乌鲁木齐县| 诸城市| 凤凰县| 沐川县| 芦山县| 图木舒克市| 衢州市| 怀远县| 耒阳市| 孟州市| 阜新市| 崇礼县| 陇南市| 上思县| 永吉县|