1. 程式人生 > >SpringAOP深入瞭解之jdk動態代理與CGlib

SpringAOP深入瞭解之jdk動態代理與CGlib

理解AOP

一般我們編寫程式的思想是縱向的,也就是一個方法程式碼從該方法第一行開始往下一步一步走,直到走完最後一行程式碼。也就是說很多業務都需要的比如使用者鑑權,資源釋放等我們都要在每個方法裡面重複再去呼叫。

public void doMethodOne()
{
    System.out.println("doMethodOne由上往下第一步:使用者鑑權");
    System.out.println("doMethodOne由上往下第二步:業務邏輯,呼叫服務1");
    System.out.println("doMethodOne由上往下最後一步:釋放資源");
}
public void doMethodTwo()
{
    System.out.println("doMethodTwo由上往下第一步:使用者鑑權");
    System.out.println("doMethodTwo由上往下第二步:業務邏輯,呼叫服務1");
    System.out.println("doMethodTwo由上往下最後一步:釋放資源");
}
public static void main(String[] args)
{
    doMethodOne();
    doMethodTwo();
}

AOP(面向切面程式設計),它可以用來攔截方法前後,來達到增強方法的目的。所以我理解的AOP的本質是在一系列縱向的控制流程中,把那些相同的子流程提取成一個橫向的面,就像下面這張圖把相同的邏輯,使用者鑑權、資源釋放抽取出來,橫切到各個需要該場景的方法的開頭、中間以及結尾。

SpringAOP中的一些術語

  • 通知(Advice): 何時(Before,After,Around,After還有幾個變種) 做什麼
  • 連線點(JoinPoint): 應用物件提供可以切入的所有功能(一般是方法,有時也是引數)
  • 切點(PointCut): 通過指定,比如指定名稱,正則表示式過濾, 指定某個/些連線點, 切點描繪了 在何地 做
  • 切面(Aspect): 通知 + 切點 何時何地做什麼
  • 引入(Introduction):向現有類新增新的屬性或方法
  • 織入(Weaving): 就是將切面應用到目標物件的過程

實現方式之JDK的動態代理