經過切點來選擇鏈接點

關於Spring AOP的AspectJ切點,最重要的一點就是Spring僅支持AspectJ切點指示器(pointcut designator)的一個子集。讓咱們回顧下,Spring是基於代理的,而某些切點表達式是與基於代理的AOP無spa

關的。表4.1列出了Spring AOP所支持的AspectJ切點指示器。代理

 

 

當咱們查看如上所展現的這些Spring支持的指示器時,注意只有execution指示器是實際執行匹配的,而其餘的指示器都是用來限制匹配的。這說明execution指示器是咱們在編寫切點定義時最主要使用的指示器。在此基礎上,咱們使用其餘指示器來限制所匹配的切點。orm

 

1.1編寫切點

爲了闡述Spring中的切面,咱們須要有個主題來定義切面的切點。爲此,咱們定義一個Performance接口:blog

Performance能夠表明任何類型的現場表演,如舞臺劇、電影或音樂會。假設咱們想編寫Performance的perform()方法觸發的通知。圖4.4展示了一個切點表達式,這個表達式可以設置當perform()方接口

法執行時觸發通知的調用。it

 

咱們使用execution()指示器選擇Performance的perform()方法。方法表達式以「*」號開始,代表了咱們不關心方法返回值的類型。而後,咱們指定了全限定類名和方法名。對於方法參數列表,咱們使用兩個點號(..)代表切點要選擇任意的perform()方法,不管該方法的入參是什麼。io

 

如今假設咱們須要配置的切點僅匹配concert包。在此場景下,可使用within()指示器來限制匹配,如圖4.5所示。form

 

 

請注意咱們使用了「&&」操做符把execution()和within()指示器鏈接在一塊兒造成與(and)關係(切點必須匹配全部的指示器)。相似地,咱們可使用「||」操做符來標識或(or)關係,而使用「!」操基礎

做符來標識非(not)操做。配置

由於「&」在XML中有特殊含義,因此在Spring的XML配置裏面描述切點時,咱們可使用and來代替「&&」。一樣,or和not能夠分別用來代替「||」和「!」。

 

1.2在切點中選擇bean

除了表4.1所列的指示器外,Spring還引入了一個新的bean()指示器,它容許咱們在切點表達式中使用bean的ID來標識bean。bean()使用bean ID或bean名稱做爲參數來限制切點只匹配特定的bean。

 

在這裏,咱們但願在執行Performance的perform()方法時應用通知,但限定bean的ID爲woodstock。

在某些場景下,限定切點爲指定的bean或許頗有意義,但咱們還可使用非操做爲除了特定ID之外的其餘bean應用通知:

 

相關文章
相關標籤/搜索