AOP作為Spring中核心部分,在Spring中扮演者重要的角色。AOP把軟件系統(tǒng)分為兩個(gè)部分:核心關(guān)注點(diǎn)和橫切關(guān)注點(diǎn)。業(yè)務(wù)處理的主要流程是核心關(guān)注點(diǎn),與之關(guān)系不大的部分是橫切關(guān)注點(diǎn)。橫切關(guān)注點(diǎn)的一個(gè)特點(diǎn)是,他們經(jīng)常發(fā)生在核心關(guān)注點(diǎn)的多處,而各處都基本相似。比如權(quán)限認(rèn)證、日志、事務(wù)處理。Aop 的作用在于分離系統(tǒng)中的各種關(guān)注點(diǎn),將核心關(guān)注點(diǎn)和橫切關(guān)注點(diǎn)分離開來。
實(shí)現(xiàn)AOP的技術(shù),主要分為兩大類:一是采用動(dòng)態(tài)代理技術(shù),利用截取消息的方式,對(duì)該消息進(jìn)行裝飾,以取代原有對(duì)象行為的執(zhí)行;二是采用靜態(tài)織入的方式,引入特定的語法創(chuàng)建“方面”,從而使得編譯器可以在編譯期間織入有關(guān)“方面”的代碼。
關(guān)于動(dòng)態(tài)代理和靜態(tài)代理的原理,大家可以參考:http://m.survivalescaperooms.com/yfyzy/p/4401833.html
在我們學(xué)習(xí)Spring的AOP之前,我們先來學(xué)習(xí)學(xué)習(xí)一下關(guān)于AOP的相關(guān)術(shù)語。
1.通知(Advice) 通知定義了切面是什么以及何時(shí)使用。描述了切面要完成的工作和何時(shí)需要執(zhí)行這個(gè)工作,就像我們平時(shí)約會(huì)時(shí)說的時(shí)間地點(diǎn)一樣∩_∩。 2.連接點(diǎn)(Joinpoint): 程序能夠應(yīng)用通知的一個(gè)“時(shí)機(jī)”,這些“時(shí)機(jī)”就是連接點(diǎn),例如方法被調(diào)用時(shí)、異常被拋出時(shí)等等。 3.切入點(diǎn)(Pointcut) 通知定義了切面要發(fā)生的“故事”和時(shí)間,那么切入點(diǎn)就定義了“故事”發(fā)生的地點(diǎn),例如某個(gè)類或方法的名稱,Spring中允許我們方便的用正則表達(dá)式來指定 4.切面(aspect) 通知和切入點(diǎn)共同組成了切面:時(shí)間、地點(diǎn)和要發(fā)生的“故事” 5.引入(Introduction) 引入允許我們向現(xiàn)有的類添加新的方法和屬性(Spring提供了一個(gè)方法注入的功能) 6.目標(biāo)(Target) 即被通知的對(duì)象,如果沒有AOP,那么它的邏輯將要交叉別的事務(wù)邏輯,有了AOP之后它可以只關(guān)注自己要做的事(AOP讓他做愛做的事) 7.代理(proxy) 應(yīng)用通知的對(duì)象,詳細(xì)內(nèi)容參見設(shè)計(jì)模式里面的代理模式 8.織入(Weaving) 把切面應(yīng)用到目標(biāo)對(duì)象來創(chuàng)建新的代理對(duì)象的過程,織入一般發(fā)生在如下幾個(gè)時(shí)機(jī): (1)編譯時(shí):當(dāng)一個(gè)類文件被編譯時(shí)進(jìn)行織入,這需要特殊的編譯器才可以做的到,例如AspectJ的織入編譯器 (2)類加載時(shí):使用特殊的ClassLoader在目標(biāo)類被加載到程序之前增強(qiáng)類的字節(jié)代碼 (3)運(yùn)行時(shí):切面在運(yùn)行的某個(gè)時(shí)刻被織入,SpringAOP就是以這種方式織入切面的,原理應(yīng)該是使用了JDK的動(dòng)態(tài)代理技術(shù)
AOP使用場景AOP用來封裝橫切關(guān)注點(diǎn),具體可以在下面的場景中使用:
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ù)
Spring我們常用的代理實(shí)現(xiàn)方式有聲明式和注解式。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注