functionStorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

AOP觀念與術(shù)語(yǔ)

系統(tǒng) 1930 0
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

示例下載。

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)用程序之中常被見到安插至各個(gè)對(duì)象的處理流程之中,這些動(dòng)作在 AOP 的術(shù)語(yǔ)中被稱之為 Cross-cutting concerns


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

AOP觀念與術(shù)語(yǔ)

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

AOP觀念與術(shù)語(yǔ)

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è) Advice Target

  • <!--[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 一書中, Rod Johnson Juergen Hoeller 在第八章中有提到, AOP 的實(shí)作有五個(gè)主要的策略: Dynamic Proxies Dynamic Byte Code Generation Java Code Generation Use of a Custon Class Loader Language Extensions

在之前靜態(tài)代理與動(dòng)態(tài)代理中,已經(jīng)使用實(shí)際的程序范例介紹過(guò)代理機(jī)制的實(shí)現(xiàn), Spring AOP 主要是透過(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í):

AOP觀念與術(shù)語(yǔ)


AOP觀念與術(shù)語(yǔ)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 精品欧美一区二区三区免费观看 | 久久不射网站 | 国内精品视频九九九九 | 久久中文亚洲国产 | 97s色视频一区二区三区在线 | a久久久久一级毛片护士免费 | 四虎国产免费 | aa毛片免费全部播放完整 | 久久最稳定资源站在线 | 一本大道香蕉大在线最新 | 亚洲欧美一区二区三区在线播放 | 亚洲一区有码 | 欧美一级毛片免费大片 | 四虎黄网| 国产丶欧美丶日韩丶不卡影视 | xxx中国bbbwww| 欧美黄一片 | 午夜免费福利网站 | 免费观看大片毛片 | 日本一区二区在线播放 | 亚洲欧美国产另类视频 | 亚洲高清免费 | 色综合久久精品中文字幕首页 | 99精品久久久久久 | jizz18性欧美大全 | 国产色婷婷免费视频 | 欧美日韩一区二区在线观看视频 | 996热精品视频在线观看 | 久久一日本道色综合久久 | 天天综合射 | 久久中文字幕一区二区三区 | 久久天天躁狠狠躁夜夜中文字幕 | 久操这里只有精品 | 国产欧美综合精品一区二区 | 精品动漫中文字幕一区二区三区 | 欧美日韩一本 | 日本视频在线观看不卡高清免费 | 精品xxxxxbbbb欧美中文 | 日日草夜夜草 | 日韩有码第一页 | 亚洲国产精品a一区 |