Spring AOP 實現原理----AspectJ與CGLIB介紹

簡介: AOP(Aspect Orient Programming),也就是面向方面編程,作爲面向對象編程的一種補充,專門用於處理系統中分佈於各個模塊(不同方法)中的交叉關注點的問題,在 Java EE 應用中,常常通過 AOP 來處理一些具有橫切性質的系統級服務,如事務管理、安全檢查、緩存、對象池管理等。AOP 實現的關鍵就在於 AOP 框架自動創建的 AOP 代理,AOP 代理主要分爲靜態代理和動態代理兩大類,靜態代理以 AspectJ 爲代表;而動態代理則以 Spring AOP 爲代表本文會從 AspectJ 分析起,逐漸深入,並介紹 CGLIB 來介紹 Spring AOP 框架的實現原理。

AOP(Aspect Orient Programming),作爲面向對象編程的一種補充,廣泛應用於處理一些具有橫切性質的系統級服務,如事務管理、安全檢查、緩存、對象池管理等。AOP 實現的關鍵就在於 AOP 框架自動創建的 AOP 代理,AOP 代理則可分爲靜態代理和動態代理兩大類,其中靜態代理是指使用 AOP 框架提供的命令進行編譯,從而在編譯階段就可生成 AOP 代理類,因此也稱爲編譯時增強;而動態代理則在運行時藉助於 JDK 動態代理、CGLIB 等在內存中“臨時”生成 AOP 動態代理類,因此也被稱爲運行時增強

在傳統 OOP 編程裏以對象爲核心,整個軟件系統由系列相互依賴的對象所組成,而這些對象將被抽象成一個一個的類,並允許使用類繼承來管理類與類之間一般到特殊的關係。隨着軟件規模的增大,應用的逐漸升級,慢慢出現了一些 OOP 很難解決的問題。

我們可以通過分析、抽象出一系列具有一定屬性與行爲的對象,並通過這些對象之間的協作來形成一個完整的軟件功能。由於對象可以繼承,因此我們可以把具有相同功能或相同特性的屬性抽象到一個層次分明的類結構體系中。隨着軟件規範的不斷擴大,專業化分工越來越系列,以及 OOP 應用實踐的不斷增多,隨之也暴露出了一些 OOP 無法很好解決的問題。


轉載自 點擊打開鏈接

spring使用jdk動態代理(基於接口)和cglib(字節碼增強)實現aop



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章