1. 程式人生 > >關於AspectJ 中的pointcut 語法

關於AspectJ 中的pointcut 語法

pointcut,切點,辨認切點執行自己指定的動作

基礎的解說如下:

public pointcut accountOperations:call(* Account.*(..))

1.萬用字元和pointcut 操縱符

* 表現任何數目的字元,除了(.)

.. 表現任何數質的字元包括任何數目的(.)

+ 描寫指訂型別的任何子類或許子交心

一元操縱符:!

兩元操做符:||和&&

優先權同java

2.籤實語法

範例署名樣式

重要的例子:

Account 型別Account

*Account 利用Account稱號停止的型別,如SavingsAccount和CheckingAccount

java.*.Date 範例Date正在任何直交的java子包中,如java.util.Date和java.sql.Date

java..* 任安在java包或者所有子包中的型別,如java.awt和java.util或者java.awt.event 和java.util.logging

javax..*Model+ 所有javax包或者子包中以Model末端的型別和其所有子類,如TableModel,TreeModel。

!vector 一切除了Vector的範例

Vector|| Hashtable Vector或者Hashtable型別

java.util.RandomAccess+ 完成RandomAccess和List的所有子類

&& java.util.List+

----------------------------------------

方式和結構器署名模式

public void Collection.clear():

在Collection中同樣籤實的clear方法

public void Account.debit(float) throws InsufficientBalanceException:

Account中同樣署名的debit方法

public void Account.set*(*)

Account中以set掃尾,而且只要一個引數型別的方法

public void Account.*()

Account中所有的出有引數的public void 法子

public * Account.*()

Account中所有出有引數的public 方法

public * Account.*(..)

Account中所有的public 方法

* Account.*(..)

Account中的一切辦法,包含private方式

!public * Account.*(..)

所有的非public 辦法

* Account+.*(..)

所有的方法,包括子類的方法

* java.io.Reader.read(..)

所有的read方法

* java.io.Reader.read(char[],..)

一切以read(char[])開端的方式,包含read(char[])和read(char[],int,400電話http://www.lwkx.com/,int)

* javax..*.add*Listener(EventListener+)

定名以add開端,以Listener末端的法子,引數中為EventListener或者子類

* *.*(..) throws RemoteException

扔出RemoteException的所有方法

構造器,同上裡

public Account.new()

出有引數的構制器法子

------------------------

屬性籤真實模式

* Account.*

所有的Account屬性

!public static * banking..*.*

所有的非public static 屬性,正在banking的包或許子包中

3.重要的pointcuts型別

分類pointcuts

遵照特定的語法用於捕捉每一個品種的可利用連線點。

主要的品種:

方法執行:execution(MethodSignature)

辦法呼叫:call(MethodSignature)

結構器施行:execution(ConstructorSignature)

構制器挪用:call(ConstructorSignature)

類始初化:staticinitialization(TypeSignature)

屬性讀操作:get(FieldSignature)

屬性寫操縱:set(FieldSignature)

破例處置施行:handler(TypeSignature)

工具始初化:initialization(ConstructorSignature)

工具事後始初化:preinitialization(ConstructorSignature)

Advice執行:adviceexecution()

基於節制淌的pointcuts

重要包括兩品種型的節制淌:

cflow(Pointcut),捕捉所有的銜接點在指訂的方法執止中,包含執行方法自身。

cflowbelow(Pointcut),捕捉所有的連線點在指訂的方法執行中,除了執行方法自身。

如以下的例子:

cflow(call(* Account.debit(..))

所有的debit方法中的連線點,包括debit方法自身

cflowbelow(call(* Account.debit(..))

所有debit方法中的連線點,除了debit方法原身

cflow(transactedOperations())

所有由transactedOperations捕捉的連線點

cflowbelow(execution(Account.new(..))

所有正在Account 結構器中施行的銜接面

基於詞彙構造的連線點

流程式碼片段,如within()和withincode()

within :捕捉在指定類或者方面中的步伐體中的所有連線點,包括內部類。

Withincode:用於捕捉在構制器或者者方法中的所有連交點,包括在此中的外地類

執行物件連線點

this,和target做為方法被挪用的物件。

this(Account),所有Account的執行點,匹配所有的連線點,如方法呼叫,屬性設放,以後的執行對於象為Account,或者其子類。

target(Account):所有的銜接面,目的工具為Account或者其子類。

在within()和this()中的區別:

一個是步伐體,而另一個為物件執行。

引數pointcuts

用於捕捉引數型別的連線點。

args(String,..,int)

args(RemoteException)

前提檢測pointcuts

if(System.currentTimeMillis()>triggerTime)

AspectJ5 已經增添了沒有少語法,主要閉於Annotation 的別樣視角的具有也說明了為什麼作者須要編纂,而運發動需求鍛練的緣由。

後面的內容很拗口,估計是翻譯過來的,前面的基本內容還是很有幫助的。

自己的心得:

call是在方法執行前後呼叫你給定的方法

execution是在方法執行內部的開頭和結尾執行你給定的方法,兩者是有區別的。

相關推薦

關於AspectJ pointcut 語法

pointcut,切點,辨認切點執行自己指定的動作 基礎的解說如下: public pointcut accountOperations:call(* Account.*(..)) 1.萬用字元和pointcut 操縱符 * 表現任何數目的字元,除了(.)

vue項目快捷語法

-m ever extend 才會 模式 refs sage 依賴 需要 1.Vue.js是漸進式框架,采用自底向上增量開發的設計基於MVVM思想。 2.Vue 完全有能力驅動采用單文件組件和Vue生態系統支持的庫開發的復雜單頁應用。 3.Vue.js 的目標是通過盡可能

轉載《Spring AOPpointcut expression表達式解析 及匹配多個條件》

targe 組合 man fin rgs acc ans value account 原文地址:https://www.cnblogs.com/rainy-shurun/p/5195439.html 原文 Pointcut 是指那些方法需要被執行"AOP",是由"Poi

Word文檔語法高亮顯示代碼

CA 代碼 過去 語言 href www. 高亮顯示 選擇 pla 有時候我們程序員也需要在word文檔裏面顯示代碼,但是直接復制過去 不好看,格式也不太對,這裏給大家分享一個Word文檔中的語法高亮顯示代碼的方法 http://www.planetb.ca/syntax-

Mybatis in 語法的使用

今天寫map時,(虛擬碼):update xxx t set t.a='1' where id in (#{ids});  當ids傳入為string 1,2,3 時,得出效果只是更新了id=1的資料,原來#{xxx}是一個字串,mybatis只會當他是一個值,如果你想達到字面上的效果:&

javascript點語法括號語法

undefined 默認值 java 字符 ole 特殊 進行 原來 點語法 點語法: 點語法根據對象中的鍵來獲取相應的值. let obj = { a: ‘a‘ } console.log(obj.a)// ‘a‘ 創建相應的鍵值對 obj.b = ‘b‘ console

mysqllike語法拼接4種方式

在mysql中,字串與字串之間用空格連線相當於拼接,'a' 'b' 'c' 相當於 'abc' 'a'"b"'c'雖然沒用空格,但由於是不同的字串型別,故也相當於拼接後的'abc'或"abc"  在mysql中,like語法本身為: like  '%str%' 解析:like與

Aop pointcut的設定

<?xml version="1.0" encoding="UTF-8"?> aop:config <aop:aspect id=“moocAspectAOP” ref=“moocAspect”> <aop:pointcut

SQL 語法順序與執行順序

SQL 語句的語法順序是: SELECT DISTINCT < select_list > FROM < left_table > < join_type > JOIN < right_table > ON < join_conditio

在vueimport()語法不能傳入變數

解決辦法: 一定要用變數的時候,可以通過字串模板來提供部分資訊給webpack;例如import(`./path/${myFile}`), 這樣編譯時會編譯所有./path下的模組,但執行時確定myFile的值才會載入,從而實現懶載入。 import(`./path/${myFile}`),

xml編寫的DTD約束與schema約束語法

DTD語法                        &nbs

MakeFileifeq語法報錯

/bin/sh: -c: line 0: syntax error near unexpected token `64,' /bin/sh: -c: line 0: `ifeq (64, 64)'   【原因】   Makefile中,當 ife

webstorm和vuees6語法報錯的解決方式

1.webstorm中es6語法報錯,解決方法: 開啟 Settings => Languages & Frameworks => Javascript 把 Javascript Language version 改為 ECMAScript 6 這樣做所有的.js檔案中es6不再報錯,但是

如何在 Shell 指令碼執行語法檢查除錯模式【轉】

我們開啟了 Shell 指令碼除錯系列文章,先是解釋了不同的除錯選項,下面介紹如何啟用 Shell 除錯模式。 寫完指令碼後,建議在執行指令碼之前先檢查指令碼中的語法,而不是檢視它們的輸出以確認它們是否正常工作。 在本系列的這一部分,我們將瞭解如何使用語法檢查除錯模式

Mybatis in 語法 的# 與 $區別

今天寫map時,(虛擬碼):update xxx t set t.a='1' where id in (#{ids});  當ids傳入為string 1,2,3 時,得出效果只是更新了id=1的資料,原來#{xxx}是一個字串,mybatis只會當他是一個值,如果你想達到字

Typoramarkdown語法及快捷鍵.md

Typora中markdown語法及快捷鍵 1.數學表示式 要啟用這個功能,首先到Preference->Editor中啟用。然後使用$符號包裹tex命令。 例如:$lim_{x\to\infty}\exp(-x)=0$ limx→∞exp⁡(−x)=0

@AspectJ對目標物件引入新特性,使用註解@DeclareParents

使用時需要引入@AspectJ的jar包,官網下載即可. @DeclareParents 標註此屬性,要引入功能,即引入的介面 value 指定哪種型別的bean引入該介面. 其中符號`+`,表示該介面的所有子類.

@AspectJ關於`advice`註解的使用

使用@AspectJ,需要額外匯入jar包,從官網下載即可,搜尋關鍵字`aspectj download`. 說明,在有些參考書中,advice譯為`增強`,依據其效用. @Aspect 定義一個切面 @PointCu

mongodb基本語法

在mongodb中基本的概念是文件、集合、資料庫,下面介紹。 SQL術語/概念 MongoDB術語/概念 解釋/說明 database database 資料庫 table collection 資料庫表/集合 row

Java 語法糖 (Syntactic Sugar)

        語法糖(Syntactic Sugar),也叫糖衣語法,是英國電腦科學家彼得·約翰·蘭達(Peter J. Landin)發明的一個術語。指的是,在計算機語言中新增某種語法,這種語法能使程式設計師更方便的使用語言開發程式,同時增強程式程式碼的可讀性,避免出錯的機會;但是這種語法對語言的功能並