面向切面的Spring通過切點來選擇連接點實例詳解
導讀
與大多數技術一樣,AOP已經形成了自己的術語。通知和切點是切面的最基本元素。
在Spring AOP中,要使用AspectJ的切點表達式語言來定義切點。
關于Spring AOP的AspectJ切點,最重要的一點就是Spring僅支持 AspectJ切點指示器 (pointcut designator ) 的一個子集。

圖4.1
當我們查看如上所展示的這些Spring支持的指示器時,注意只有execution指示器是實際執(zhí)行匹配的,而其他的指示器都是用來 限制匹配的。這說明execution指示器是我們在編寫切點定義時最 主要使用的指示器。在此基礎上,我們使用其他指示器來限制所匹配的切點。
編寫切點
為了闡述Spring中的切面,我們需要有個主題來定義切面的切點。為 此,我們定義一個Performance接口:
package com.spring.point;
/**
* @author huyang
*/
public interface Performance {
public void perform();
}Performance可以代表任何類型的現場表演,如舞臺劇、電影或音 樂會。假設我們想編寫Performance的perform ()方法觸發(fā)的通 知。
圖4.4展現了一個切點表達式,這個表達式能夠設置當perform()方 法執(zhí)行時觸發(fā)通知的調用。
execution(*concert.Performance.perform(...))
小猿解釋這個語句,即攔截目標方法執(zhí)行切面規(guī)則。

圖4.4
使用AspectJ切點表達式來選擇Performance 的perform()方法
我們使用execution()指示器選擇Performance的perform()方 法。
方法表達式以“*”號開始,表明了我們不關心方法返回值的類型。
然后,我們指定了全限定類名和方法名。
對于方法參數列表,我們使用兩個點號 ( ..) 表明切點要選擇任意的perform ()方法,無論該方法的入參是什么。
現在假設我們需要配置的切點僅匹配concert包。在此場景下,可 以使用within ()指示器來限制匹配,如圖4.5所示。

圖4.5
使用within()指示器限制切點范圍
對圖4.5所含的元素進行講解:

在切點中選擇bean
除了表4. 1所列的指示器外,Spring還引入了一個新的bean()指示 器,它允許我們在切點表達式中使用bean的ID來標識bean。bean ()
使用bean ID或bean名稱作為參數來限制切點只匹配特定的bean。 例如,考慮如下的切點:
execution(* concert.Performance.perform()) and bean (*woodstock)
在這里,我們希望在執(zhí)行Performance的perform()方法時應用通 知,但限定bean的ID為woodstock。
在某些場景下,限定切點為指定的bean或許很有意義,但我們還可以 使用非操作為除了特定ID以外的其他bean應用通知:
execution(* concert.Performance.perform()) and !bean (`woodstock`)
在此場景下,切面的通知會被編織到所有ID不為woodstock的bean 中。
現在,我們已經講解了編寫切點的基礎知識,讓我們再了解一下如何 編寫通知和使用這些切點聲明切面
以上就是面向切面的Spring通過切點來選擇連接點實例詳解的詳細內容,更多關于Spring切點選擇連接點的資料請關注腳本之家其它相關文章!
相關文章
SpringBoot thymeleaf eclipse熱部署方案操作步驟
今天小編就為大家分享一篇關于SpringBoot thymeleaf eclipse熱部署方案操作步驟,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
SpringMvc+Mybatis+Pagehelper分頁詳解
這篇文章主要介紹了SpringMvc+Mybatis+Pagehelper分頁詳解,非常不錯,具有參考借鑒價值,需要的朋友可以參考下的相關資料2017-01-01

