1. 程式人生 > >Spring AOP相關概念

Spring AOP相關概念

AOP面向切面程式設計

AOP(Aspect Oriented Programming),即面向切面程式設計,可以說是OOP(Object Oriented Programming,面向物件程式設計)的補充和完善。AOP採取橫向抽取機制,替代了傳統縱向繼承體系重複性程式碼。在程式開發中主要用來解決一些系統層面上的問題,比如日誌,事務,許可權等。

簡單的說,AOP就是在擴充套件功能時,我們不用修改原有的程式碼就能實現。例如,我們UserService中有個新增使用者的方法add,我們現在需要再新增使用者後列印日誌,傳統的做法我們要修改add方法,在add方法中加入列印日誌的程式碼;但是通過AOP我們就不需要修改add方法,只要在寫一個列印日誌的類LogService,然後在LogService類新增log方法,我們通過配置LogService類和其log方法,就能實現在呼叫add方法後,執行LogService中的log方法。

AOP中的相關概念

  • 切面(aspect):散落在系統各處的通用的業務邏輯程式碼,如日誌模組,許可權模組,事務模組等。通常是一個類,例如我們上面提到的LogService類就是一個切面。在程式碼中,可以簡單地認為, 使用 @Aspect 註解的類就是切面。
  • 連線點(Join point):比如:方法呼叫、方法執行、欄位設定/獲取、異常處理執行、類初始化、甚至是 for 迴圈中的某個點都可以認為是連線點,理論上, 程式執行過程中的任何時點都可以作為作為連線點。但 Spring AOP 目前只支援方法的呼叫。也就是說Spring AOP中的連線點就是所有的方法。
  • 切入點(pointcut):攔截的方法,連線點攔截後變成切入點。例如上文中UserService除了有add方法外,還有update,delete等方法,但我們只要在add方法後新增日誌,UserService中的所有方法都是連線點,但add才是切入點。切入點就是實際需要攔截的切入點,就是帶有通知的連線點,在程式中主要體現為書寫切入點表示式。連線點是AOP能夠攔截的方法,切入點是指實際攔截的方法。
  • 通知(advice):所謂通知指的就是指攔截到連線點之後要執行的程式碼,通知分為前置、後置、異常、最終、環繞通知五類。上文中LogService類中的log方法就是一個通知,他要在add方法後執行,顯然log方法是後置型別的通知。AOP在特定的切入點上執行的增強處理,有before,after,afterReturning,afterThrowing,around