簡單的談一談AOP(面向切面程式設計)

2021-08-20 13:38:04 字數 2341 閱讀 3219

時光如梭,轉眼之間,春招已然結束,秋招正在趕來,又到了技術布道的時候了。。

今天簡單的聊一聊aop(aspect oriented programming)

起因

專案中需要檢視一些方法前後的執行時間,以便合理的推測出**是否能夠扛得住xxqps的訪問。要是每個方法前後都寫乙個時間減法,那可真是個累活了,於是aop思想出來了。。

通過乙個條件來匹配想要攔截的**,這個條件在aop中就是pointcut(切點)

切點搞定之後,只需要再做乙個切面(即定義攔截後的操作)就行了。

假設現在有乙個需求:

inte***ce passing在這個介面前面和後面都列印出特定的字串

方法一:寫死**

inte***ce

passing

class

passingimpl

implements

passing

private

void before()

private

void after()

}public

class

hello

}

如果只有乙個方法那還好說,但是萬一每個方法都要有這個需求,那工作量可就完蛋了,所以aop來了。

一般可以有以下三種解決方案:

* 靜態**

* jdk動態**

* cglib動態**

靜態**

inte***ce

passing

class

passingimpl

implements

passing

private

void before()

private

void after()

}class

passingproxy

implements

passing

@override

public

void time_consume(string name)

private

void before()

private

void after()

}public

class

hello

}

靜態**看起來還是不錯的,但是如果我想多**幾個其他的,那還得為其他的幾個量身定做幾個,這重複勞動要不得,所以就有了接下來的jdk動態**。

jdk動態**

class jdkdynamicproxy implements invocationhandler

public

t getproxy()

@override

public object invoke(object proxy, method method, object args) throws throwable

private

void

before()

private

void

after()

}public

class hello

}

如此這般,所有的**類都能夠合併到動態**類中,還是得感謝泛型,但是這樣做有乙個問題:jdk的動態**只能夠提供有**介面的,不能**沒有介面的類,這下麻煩大了,萬一專案中就是需要**沒有介面的類該咋辦呢。cglib動態**!

cglib動態**

使用開源的cglib類庫可以**沒有介面的類,這樣就完美解決了上述問題,該**以後有時間再詳細研究研究

spring aop:

aop框架可以理解為乙個***框架,只需要攔截特定的方法即可,這個時候切面(aop的實現方式)就是aop的核心,即給出如何攔截的方式,說白了就是通過切面,將攔截匹配的條件組合在一起,然後 將這個切面配置到proxyfactory中,從而生成**。

最後附上一張aop思維導圖

小結

感謝本書《架構探險》,aop確實值得好好的研究研究。

簡單理解AOP(面向切面程式設計)

aop為aspect oriented programming的縮寫,意為 面向切面程式設計,通過預編譯方式和執行期動態 實現程式功能的統一維護的一種技術。aop與oop是面向不同領域的兩種設計思想。oop 物件導向程式設計 針對業務處理過程的實體及其屬性和行為進行抽象封裝,以獲得更加清晰高效的邏輯...

簡單理解AOP(面向切面程式設計)

aop為aspect oriented programming的縮寫,意為 面向切面程式設計,通過預編譯方式和執行期動態 實現程式功能的統一維護的一種技術。aop與oop是面向不同領域的兩種設計思想。oop 物件導向程式設計 針對業務處理過程的實體及其屬性和行為進行抽象封裝,以獲得更加清晰高效的邏輯...

簡單理解AOP(面向切面程式設計)

aop為aspect oriented programming的縮寫,意為 面向切面程式設計,通過預編譯方式和執行期動態 實現程式功能的統一維護的一種技術。aop與oop是面向不同領域的兩種設計思想。oop 物件導向程式設計 針對業務處理過程的實體及其屬性和行為進行抽象封裝,以獲得更加清晰高效的邏輯...