Spring AOP原理及簡單應用

相信只要使用過Spring框架的,你們對於AOP都不陌生,尤爲提起它就能馬上隨口說出,通常用在日誌處理、異常處理、權限驗證等方面。但剛開始 接觸不免會有各類各樣的疑惑,今天抽時間,按照以前的理解整理了一份關於Spring AOP的簡單教程,但願可以幫助你們儘快的瞭解它的實現過程及原理。首先來明確幾個概念:正則表達式

  • JointPoint框架

系統在運行以前,AOP的功能模塊須要織入到OOP的功能模塊中。要進行這種織入過程,須要知道在系統的哪些功能點上進行織入操做,這些將要在其上 進行織入操做的系統功能點就稱爲JointPoint。如某方法調用的時候或者處理異常的時候,在Spring AOP中,一個鏈接點老是表示一個方法的執行。常見的幾種類型的JoinPoint:模塊化

Ø 方法調用:當某個方法被調用的時候所處的程序執行點;oop

Ø 方法執行:該類型表示的是某個方法內部執行開始時的點,應該與方法調用相區分;日誌

Ø 構造方法調用:程序執行過程當中對某個對象調用其構造方法進行初始化時的點;對象

Ø 構造方法執行:它與構造方法調用關係如同方法調用與方法執行間的關係;教程

Ø 字段設置:對象的某個屬性經過setter方法被設置或直接被設置的執行點;資源

Ø 字段獲取:某個對象相應屬性被訪問的執行點;原理

Ø 異常處理執行:某些類型異常拋出後,對應的異常處理邏輯執行點;權限

Ø 類初始化:類中某些靜態類型或靜態塊的初始化時的執行點。

  • Pointcut

Pointcut表明的是JoinPoint的表述方式。在將橫切邏輯織入當前系統的過程當中,雖然知道須要在哪些功能點上織入AOP的功能模塊,但 須要一種表達方法。Pointcut和一個切入點表達式關聯,並在知足這個切入點的Joinpoint上運行。目前一般使用的Pointcut方式有如下 幾種:

Ø 直接指定Joinpoint所在的方法名稱;

Ø 正則表達式,Spring的AOP支持該種方式;

Ø 使用特定的Pointcut表述語言,Spring 2.0後支持該方式。

  • Advice

Advice是單一橫切關注點邏輯的載體,它表明將會織入到JoinPoint的橫切邏輯。在切面的某個特定的鏈接點上執行的邏輯。根據它在Joinpoint位置執行時機的差別或完成功能的不一樣,可分爲如下幾種形式:

Ø Before Advice:在Joinpoint指定位置以前執行的Advice類型,能夠採用它來作一些系統的初始化工做,如設置系統初始值,獲取必要系統資源等。

Ø After Advice:在相應鏈接點以後執行的Advice類型,它還能夠細分爲如下三種:

² After Returning Advice:只有當前Joinpoint處執行流程正常完成後,它纔會執行;

² After throwing Advice:在當前Joinpoint執行過程當中拋出異常的狀況下會執行;

² After Advice:該類型的Advice無論JoinPoint處執行流程是正常仍是拋出異常都會執行。

Ø Around Advice:對附加其上的Joinpoint進行包裹,能夠在joinpoint以前和以後都指定相應的邏輯,甚至中斷或忽略joinpoint處原來程序流程的執行。

  •  Aspect

它是對系統中橫切關注點邏輯進行模塊化封裝的AOP概念實體,它能夠包含多個Pointcut以及相關的Advice定義。

  •  織入器

通過織入過程後,以Aspect模塊化的橫切關注點纔會集成到oop的現存系統中,而完成織入過程實體稱爲織入器。Spring中使用一組類來完成最終的織入操做,ProxyFactory類是Spring AOP最通用的織入器。

  •  目標對象

符合Pointcut所指定的條件,將在織入過程當中被織入橫切邏輯的對象,稱之爲目標對象。

單看上述的概念,可能會以爲有點眼花繚亂,其實經過一個簡單的AOP的實例便可以幫助咱們很快的瞭解其內部的機制。其實對於方法攔截有不一樣的實現方 式,經常使用的即有直接採用Spring提供的各類Advice進行攔截,另外一種則是採用MethodInterceptor方式進行攔截。

相關文章
相關標籤/搜索