1. 程式人生 > 實用技巧 >10-20 Spring框架(三)—— AOP核心

10-20 Spring框架(三)—— AOP核心

一、概念

  AOP(Aspect Oriented Programming)的縮寫,翻譯為面向切面程式設計或面向方面程式設計,通過預編譯方式和執行期動態代理實現程式功能的統一維護的一種技術。 

  AOP(面向切面程式設計)和OOP(面向物件程式設計)是不同領域的兩種設計思想

  OOP(面向物件程式設計)
    針對業務處理過程中屬性和行為進行抽象和封裝,以複用程式碼、降低系統複雜度。
  AOP(面向切面程式設計)
    針對業務處理過程中的切面進行橫向提取,以隔離業務、降低業務之間的耦合度。

二、AOP使用場景

  1.日誌記錄
  2.效能統計
  3.安全控制 主要針對安全許可權


  4.事務處理
  5.異常處理
  6.其他功能

三、AOP術語 

  連線點
    AOP插入程式碼的特定位置(方法呼叫前,方法呼叫後,方法呼叫前後,丟擲異常)
  切點
    AOP定位或查詢連線點的方式(一個切點可以匹配多個連線點)
  增強
    AOP插入到連線點的一段程式碼程式(前置增強、後置增強、環繞增強和丟擲異常增強)
  引介
    特殊的增強(可以為類新增一些屬性和方法)
  織入
    插入程式碼的過程(AOP三種方式:編譯器織入,類裝載器織入,動態代理織入)
  切面
    由切點和增強或引介組成。(Spring AOP是負責實施切面的框架)

 3.1註解

<!– 開啟 AOP 註解開關 --> <aop:aspectj-autoproxy />

@Aspect 註解:放置於切面類上,用於註解定義一個切面

@Before 註解:放置於切面類方法上,用於註解實現前置增強

@After 註解:放置於切面類方法上,用於註解實現後置增強

@Around 註解:放置於切面類方法上,用於註解實現環繞增強

@AfterThrowing 註解:放置於切面類方法上,用於註解實現丟擲異常增強

  3.2切點表示式

  切點表示式 = execution(返回值型別 + 包名 + 類名 + 方法名 + 引數個數)

  切點表示式支援三個萬用字元:

    符號(*) :代表任意字元,匹配上下文中的一個元素

    符號(..):代表任意字元,可以代表多個元素,但是在表示類的時候不能單獨使用,必須和 * 配合;在代表形參的時候可以單獨使用

    符號(+):代表按型別匹配指定類的所有類(包括子類),只能跟在類名的後面
  舉例:
    execution(* com.dt..Dog.b(..))