AOP(1)介紹&分類

一、有了OOP,為什么還需要AOP?

  • 我們在精熟了OOP的方方面面,包括什么設(shè)計模式。但是我們還是無法解決某些問題。
  • 對于系統(tǒng)中普通的業(yè)務(wù)關(guān)注點,OOP可以很好地對其進行分解并使之模塊化,但卻無法更好地避免類似于系統(tǒng)需求地實現(xiàn)在系統(tǒng)中各處散落這樣地問題。(安全檢查、系統(tǒng)日志、事務(wù)管理)

二、AOP的尷尬?

  • AOP現(xiàn)在沒有主權(quán),所以,現(xiàn)時代的AOP實現(xiàn)都需要“寄生”于OOP的主權(quán)領(lǐng)土中。

三、靜態(tài)AOP

  • 以AspectJ為例:相應(yīng)的橫切關(guān)注點以Aspect形式實現(xiàn)之后,會通過特定的編譯器,將實現(xiàn)后的Aspect編譯并織入到系統(tǒng)的靜態(tài)類中。
  • 優(yōu)點:Aspect直接以java字節(jié)碼的形式編譯到j(luò)ava類中,jvm可以像通常一樣加載java類運行,幾乎沒有性能損失。
  • 缺點:不夠靈活,一旦需要修改,就需要重新編譯,重新織入。

四、動態(tài)AOP

  • 動態(tài)代理:可以在運行期間,為相應(yīng)的接口動態(tài)生成對應(yīng)的代理對象。
  • 缺點:所有需要織入橫切關(guān)注點邏輯的模塊類都得實現(xiàn)相應(yīng)得接口,因為動態(tài)代理機制只針對接口有效。Spring默認采用這種機制。
  • 優(yōu)點:相比于動態(tài)字節(jié)碼增強,性能由一定得優(yōu)勢,因為這是通過JVM做的,性能差不多是1.5倍
  • 動態(tài)字節(jié)碼增強:在運行期間,通過動態(tài)字節(jié)碼增強技術(shù)為這些系統(tǒng)模塊類生成相應(yīng)的子類,而將橫切邏輯加到這些子類中,讓應(yīng)用程序在執(zhí)行期間使用的是這些動態(tài)生成的子類,從而達到將橫切邏輯織入系統(tǒng)的目的。
  • 優(yōu)點:目標類不再不需要實現(xiàn)相應(yīng)的接口,擺脫了接口,spring在動態(tài)代理不能用的時候,采用cglib。

五、自定義類加載器

  • 在class文件加載期間,將橫切邏輯,進行織入,然后進行偷梁換柱。。。
最后編輯于
?著作權(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)容

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