AspectJ AOP

由于最近項目中經(jīng)常使用到AOP,在寫這篇博客之前,我對于AspectJ 框架 aop 和 Spring aop 的區(qū)別以及概念都是比較模糊的,希望讀者可以通過這篇博客,深入的了解 AspectJ 框架是如何進行切面處理的。

圖 1

如圖1所示,在編寫業(yè)務(wù)代碼過程中,從業(yè)務(wù)邏輯角度劃分,可以分為業(yè)務(wù)相關(guān)代碼和非業(yè)務(wù)相關(guān)代碼。業(yè)務(wù)代碼是功能實現(xiàn)的基礎(chǔ),但是非業(yè)務(wù)代碼在整個過程中也扮演者一個非常重要的角色,例如:添加緩存,方法性能監(jiān)控等等。有沒有什么辦法可以將兩者相隔離呢?

AOP:全稱?Aspect Oriented Programming,面向切面編程。

AOP 技術(shù)為業(yè)務(wù)邏輯代碼與非業(yè)務(wù)邏輯代碼的隔離提供了一種有效的解決方案。


圖二

如上圖所示,使用 AOP 技術(shù),可以將業(yè)務(wù)邏輯代碼與非業(yè)務(wù)邏輯代碼相互隔離,互不影響。

AOP 技術(shù)如何實現(xiàn)?

最早的實現(xiàn) AOP 技術(shù)使用到的是 AspectJ 框架,實現(xiàn)的原理為靜態(tài)織入。在編譯時期,優(yōu)先編譯非業(yè)務(wù)相關(guān)代碼,然后在編譯業(yè)務(wù)代碼時將非業(yè)務(wù)代碼織入,以達到橫切的效果(本文主要講解的 AspectJ框架)。在講解實例之前,先普及兩個概念

1、pointcut :切點,即需要使用 AOP 的點。

2、advice:通知,即想要在切點處進行哪些具體的操作。

下面介紹 AspectJ 實現(xiàn) AOP 的兩種形式,編碼以及使用注解的方式。

圖三

如圖三所示,ProcessData 類中有一個 saveDB() 保存數(shù)據(jù)的方法,在執(zhí)行該方法前,需要打印一下請求的日志,請求完成之后,也需要打印日志。打印日志和業(yè)務(wù)邏輯其實是沒有任何關(guān)聯(lián)的,但是又是必須需要的,寫在業(yè)務(wù)邏輯代碼中,會顯得很臃腫,這時就可以使用 AOP 技術(shù)。

1、使用編碼方式使用 AspectJ 框架

圖四?


圖五

如上圖所示,圖四將非業(yè)務(wù)邏輯代碼抽取出來,進行切面處理。圖五只進行業(yè)務(wù)邏輯處理。打印結(jié)果和不使用AOP的結(jié)果是一致的。需要注意的點是,AspectJ 框架的編譯器不是 javac,而是 Ajc,Ajc可以認為是javac的增強版本,在使用 Aspect? 進行編碼測試 AOP 時,需要手動的修改編譯器,IDEA 修改方法:File->setting->Build,Execution,Devlopment->Compiler->Java Compiler? use compiler改為 Ajc。如下圖所示:

圖六

使用 AspectJ 框架進行 AOP 之后,反編譯代碼,業(yè)務(wù)邏輯代碼被非業(yè)務(wù)邏輯代碼靜態(tài)織入了,如下圖所示:

圖七

2、使用注解方式使用 AspectJ 框架

圖八

需要注意的是,使用 @Aspect 注解進行橫切的時候,也是需要配置編譯器,使用的是 Ajc。

下一節(jié)將講述的是Spring AOP 中是如何兼容 Aspect 框架的。?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 團隊開發(fā)框架實戰(zhàn)—面向切面的編程 AOP 引言 軟件開發(fā)的目標是要對世界的部分元素或者信息流建立模型,實現(xiàn)軟件系統(tǒng)...
    Bobby0322閱讀 4,350評論 4 49
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,034評論 25 709
  • 雷雨家庭閱讀館,寒假精讀班報名開始了。做個愛書的孩子,就來我家,這里有他們愛上讀書的故事。 閱讀是一筆財富,然而不...
    雷雨的鄉(xiāng)村閱讀 637評論 0 0
  • 有的人不是皮實,只是生活讓她過得格外堅強 有時候吃藥并不一定會治好病,只是一顆定心丸 生活,總是令人匪夷所思,我們...
    小學(xué)姐閱讀 198評論 0 0
  • 古人業(yè)余讀書有著名的“三上”“三余”。所謂“三上”,就是馬上,廁上,枕上?!叭唷保褪且雇?,雨天,冬季;夜為日之...
    清水一滴閱讀 1,572評論 0 7

友情鏈接更多精彩內(nèi)容