Spring Aop切點
阿新 • • 發佈:2018-04-13
ring spa str lec fill AC 應用 caption get()
作者:郭之源
鏈接:https://www.jianshu.com/p/0dc2eea8e59e
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
切點用於準確定位應該在什麽地方應用切面的通知。通知和切點是切面的最基本的元素。在Spring AOP中要使用AspectJ的切點表達式來定義切點。下面我們列出Spring AOP所支持的AspectJ切點指示器。
AOP原理圖AspectJ指示器 | 描述 |
---|---|
arg() | 限定連接點匹配參數為指定類型的執行方法 |
@args() | 限定連接點匹配參數由指定註解標註的執行方法 |
execution() | 用於匹配連接點執行的方法 |
this() | 限定連接點匹配AOP代理的類型bean引用為指定類型的類 |
target() | 限定連接點匹配目標對象為指定類型的類 |
@target() | 限定連接點匹配特定的執行對象,這些對象對應的類要有指定類型的註解 |
within() | 限定匹配連接點指定的類型 |
@within() | 限定匹配連接點指定註解所標註的類型(當使用Spring AOP時,方法定義在指定的註解所標註的類裏) |
@annotation | 限定匹配帶有特定註解的連接點 |
在Spring 中嘗試使用AspectJ其他的的指示器,將會拋出IllegalArgumentException異常。我們看到在上面介紹的指示器中只有execution()是實際執行匹配的,而其他指示器都是限制匹配的。所以我們通常使用execution指示器匹配,然後通過其他指示器進行限制。
1.編寫切點
為了闡述Spring中的切面,我們要限定一個切點:
public interface Performance {
public void perform();
}
下面我們定義一個表達式,設置當perform()執行時觸發通知的調用:
匹配表達式execution(* concert.Perfirmance.perform(..))
第一個*代表匹配所有類型的返回值,中間的類名.方法名指定匹配的類的特定方法,()中的 .. 表示匹配所有的參數列表。
我們好可以在ececution中使用其他的匹配器,用來過濾匹配的方法:
execution(* concert.Perfirmance.perform(..) && within(concer.*))
上面的表達式表示匹配concert.Perfirmance的perform方法,並且該方法在concer包中。裏面的&&表示與的意思,除此之外還有 || 表示或, ! 表示非。但是 & 在Xml中有特殊的含義,這時我們也可以使用 and 代替 && ,用 or 代替 || ,用 not 代替 !。
2.在切點中選擇bean
處理上面;列出的指示器外,Spring還支持一種新的指示器bean(),它允許我們在切點中使用bean的ID來標示bean:
execution(* concert.Perfirmance.perform(..) and bean(‘woodstock‘))
在這裏我們限定了bean的ID為 woodstock,其實bean()指示器更多的使用場景是 除去特定ID的bean應用通知:
execution(* concert.Perfirmance.perform(..) and !bean(‘woodstock‘))
作者:郭之源
鏈接:https://www.jianshu.com/p/0dc2eea8e59e
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
Spring Aop切點