Spring的面向切面AOP

2021-07-03 10:48:24 字數 1370 閱讀 4327

aop(面向切面)

①通知(advice):在什麼時機呼叫該方法;spring提供了5種通知

②切點(pointcut):標註需要使用到該通知的方法的位置

③切面(aspect):是通知與切點的結合

spring提供了4種各具特色的aop支援:

①基於**的經典aop

②@aspectj註解驅動的切面

③純pojo切面

④注入式aspectj切面(適合spring的各版本)

spring的切面由包裹了目標物件的**類實現,**類處理方法的呼叫執行額外的切面邏輯。並呼叫目標方法

呼叫者--------》**(呼叫額外的切面邏輯)----------》目標bean

spring借助aspectj的切點表示式語言來定義spring的切面

execution:用於匹配是連線點的方法

spring可以加多個指示器,用&&來連線

spring的bean()指示器

execute(* com.tanghaibin.spring.person.play(..)) && bean(***):表示在呼叫com.tanghaibin.spring包下的person類中play方法時呼叫該通知,並且bean的id要為***才可以

使用xml配置aop:

//配置aop切面都需要在此標籤下

//宣告乙個aop切面

//宣告乙個通知與切點,呼叫那個方法

如果乙個切面中有多個通知,且切點來自同乙個類,那麼就會出現切點相同,就會重複寫,很麻煩;解決之道:定義乙個可以在所有通知中都可以使用的命名切點:

其他的通知都可以通過id引用該切點表示式:

環繞通知:

需要在做什麼事情之前與做什麼事情之後進行資料的通訊,就如吃飯一樣,如果要計算你吃飯吃了多長時間,就需要在吃飯之前進行計時,當飯吃完後,計算花費了多少時間;這樣就需要環繞通知:

環繞通知的方法需要乙個形參:proceedingjoinpoint型別的;這個物件很重要,因為它能讓我們在通知裡呼叫被通知的方法,通知方法可以完成任何它所需要做的事情,做完後,可以呼叫proceedingjoinpoint中的proceed()方法,

將控制轉給被通知的方法,如果沒有呼叫該方法,通知就會阻止呼叫被通知的方法

宣告環繞通知:使用標籤        

當呼叫者呼叫被通知者的時候,我們可以獲取其向被通知者傳遞的引數,需要在申明通知的時候加上引數:

通過@aspectj註解來定義切面:

@aspect

@component

public class aspectdemo

@before("pointcut()")//通知註解,引用上面定義的切點

public void before()

}在xml檔案配置:

Spring面向切面程式設計AOP

感謝zejian 大佬的分享 關於 spring aop aspectj 你該知曉的一切 大佬的分享讓我受益匪淺!首先學習aop前,弄清楚為什麼要使用aop?舉個栗子有助於理解 乙個支付轉賬的小栗子 我們每次使用手機支付時,不管轉賬還是支付都需要驗證支付資訊密碼。這時aop的好處就體現出來了,我們可...

Spring 的面向切面程式設計(AOP)

aop是一種新的方 是物件導向程式設計的補充。aop的主要關注點是切面,是切面模組化的橫切關注點。使用aop的好處 1.每個事物邏輯位於乙個位置,不分散。便於維護和公升級。2.業務模組更簡潔,只包含核心業務 spring aop的方式有2種,一種是通過註解的方式。一種是通過xml配置檔案的方式。1....

AOP(面向切面程式設計)和Spring 的AOP

aop 是面向切面程式設計,相對於oop 物件導向程式設計 spring 的aop 是aop 思想的一種實現 aop 可以說是oop 的補充和完善 oop 引入封裝 繼承和多型性等概念來建立一種物件層次結構,用以模擬公共行為的乙個集合。當我們需要為分散的物件引入公共行為的時候,oop 則顯得無能為力...