《Spring揭祕》——AOP(筆記)

AOP(Aspect-Oriented Programming):

靜態AOP:

  • 實現。以AspectJ爲代表。AspectJ會使用ajc編譯器將各個Aspect以Java字節碼的形式編譯到系統的各個功能模塊中,以達到融合Aspect和Class的目的。
  • 優點。Aspect直接以Java字節碼的形式編譯到Java類中,Java虛擬機可以像通常一樣加載Java類運行(編譯完成的Aspect完全符合Java類的規範),不會對整個系統的運行造成任何的性能損失。
  • 缺點。靈活性不夠。

動態AOP:

  • 實現。JBoos AOP,Spring AOP以及Nanning等AOP框架。AOP的織入過程在系統運行開始之後進行,而不是預先編譯到系統類中,而且織入信息大都採用外部XML文件格式保存,可以在調整織入點以及織入邏輯單元的同時,不必變更系統其他模塊,甚至在系統運行的時候,也可以動態更改織入邏輯。
  • 缺點:難免會造成一定的運行時性能損失。

實現機制:

  1。動態代理:

  • 實現。將橫切關注點邏輯封裝到動態代理的InvocationHandler中,然後在系統運行期間,根據橫切關注點需要織入的模塊位置,將橫切織入到相應的代理類中。
  • 優缺點。所有需要織入橫切關注點邏輯的模塊都得實現相應的接口,因爲動態代理機制只針對接口有效。性能稍遜一些。
  • 應用。Spring AOP的默認模式。Nanning。

  2。動態字節碼增強:

  • 實現:只要交給Java虛擬機運行的文件符合Java class規範。不一定需要使用Javac編譯器編譯而成,也可以使用ASM或者CGLIB等Java工具庫。
  • 優點:即使模塊沒有實現相應的接口,我們依然可以對其進行擴展,而不像動態代理那樣受限於接口。
  • 缺點:如果需要擴展的類以及類中實現方法等聲明爲final的話,則無法對其進行子類化的擴展。

概念:

  • Joinpoint:只要允許,程序執行過程中任何時點都可以作爲橫切邏輯的織入點
  • Pointcut:Pointcut代表Joinpoint的表述方式。將橫切邏輯織入當前系統的過程中,需要參照Pointcut規定的Joinpoint信息,纔可以知道應該往系統的哪些Joinpoint上織入橫切邏輯。
  • Advice:代表將會織入到Joinpoint的橫切邏輯。
  • Aspect:對系統中的橫切關注點邏輯進行模塊化封裝的AOP概念實體。
  • Target Object:目標對象。







參考:

《Spring揭祕》

thomesca(北蔡):http://blog.csdn.net/thomescai (轉載請保留) 


發佈了50 篇原創文章 · 獲贊 15 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章