package ch2.test;
public inte***ce performance
package ch2.test;
import org.aspectj.lang.proceedingjoinpoint;
import org.aspectj.lang.annotation.aspect;
import org.aspectj.lang.annotation.around;
import org.aspectj.lang.annotation.pointcut;
@aspect
public class aodience3
//環繞通知方法
@around("performance()")
public void watchperformance(proceedingjoinpoint pj)
catch (throwable e)
}}
在這裡,@around註解表明watchperformance()方法會作為performance()切點的環繞通知。在這個通知中,觀眾在演出之前會將手機調至靜音並就坐,演出結束後會鼓掌喝彩。像前面一樣,如果演出失敗的話,觀眾會要求退款。
可以看到,這個通知所達到的效果與之前的前置通知和後置通知是一樣的。但是,現在它們位於同乙個方法中,不像之前那樣分散在四個不同的通知方法裡面。
關於這個新的通知方法,你首先注意到的可能是它接受proceedingjoinpoint作為引數。這個物件是必須要有的,因為你要在通知中通過它來呼叫被通知的方法。通知方法中可以做任何的事情,當要將控制權交給被通知的方法時,它需要呼叫proceedingjoinpoint的proceed()方法。
需要注意的是,別忘記呼叫proceed()方法。如果不調這個方法的話,那麼你的通知實際上會阻塞對被通知方法的呼叫。有可能這就是你想要的效果,但更多的情況是你希望在某個點上執行被通知的方法。
有意思的是,你可以不呼叫proceed()方法,從而阻塞對被通知方法的訪問,與之類似,你也可以在通知中對它進行多次呼叫。要這樣做的乙個場景就是實現重試邏輯,也就是在被通知方法失敗後,進行重複嘗試。
Spring 的環繞通知
spring 的環繞通知和前置通知,後置通知有著很大的區別,主要有兩個重要的區別 1 目標方法的呼叫由環繞通知決定,即你可以決定是否呼叫目標方法,而前置和後置通知是不能決定的,他們只是在方法的呼叫前後執行通知而已,即目標方法肯定是要執行的。2 環繞通知可以控制返回物件,即你可以返回乙個與目標物件完全...
Spring框架 Spring的環繞通知
問題 當我們配置了環繞通知之後,切入點方法沒有執行,而通知方法執行了 環繞通知 問題 當我們配置了環繞通知之後,切入點方法沒有執行,而通知方法執行了 public void aroundprintlog 配置環繞通知 詳細的注釋請看logger類中 問題 當我們配置了環繞通知之後,切入點方法沒有執行...
spring(十) aop環繞通知
假如有這麼乙個場景,需要統計某個方法執行的時間,如何做呢?典型的會想到在方法執行前記錄時間,方法執行後再次記錄,得出執行的時間。如果採用spring的aop,僅僅使用前置和後置方法是無法做到的,因為他們無法共享變數。這樣通過環繞通知,就可以快捷的實現。首先在切面通知類中宣告環繞通知類 public ...