Spring 使用介紹(六)—— AOP詳解
阿新 • • 發佈:2018-04-27
表示 att 通配符 except cat execution 詳解 有一個 字符
一、切入點語法
1)通配符
AOP支持的通配符:
*:匹配任何數量字符
..:匹配任何數量字符的重復,在類型模式中匹配任何數量子包,在方法參數模式中匹配任何數量參數
+:匹配指定類型的子類型,僅能作為後綴放在類型模式後邊
實例:
java.lang.String 匹配String類型 java.*.String 匹配java包下的任何“一級子包”下的String類型,如匹配java.lang.String,但匹配java.String或java.lang.ss.String java..* 匹配java包及任何子包下的任何類型,如java.String、java.lang.String java.lang.*ing匹配任何java.lang包下的以ing結尾的類型 java.lang.Number+ 匹配任何java.lang.Number的子類型,如java.lang.Integer、java.math.BigInteger
2)類型匹配,語法如下:
註解? 類的全限定名
- 註解:可選,類型上持有的註解
- 類的全限定名:必填,任何類全限定名
3)方法匹配,語法如下:
註解? 修飾符? 返回值類型 類型聲明?方法名(參數列表) 異常列表?
- 註解:可選,方法上持有的註解
- 修飾符:可選,如public、protected
- 返回值類型:必填,可以是任何類型模式,“*”表示所有類型
- 類型聲明:可選,可以是任何類型模式
- 方法名:必填,“*”表示任何方法名
- 參數列表:必填,如:
- () 表示方法沒有任何參數
- (..) 表示方法接受任意個參數
- (..,java.lang.String) 表示方法接受java.lang.String類型的參數結束,且其前邊可以接受有任意個參數
- (*,java.lang.String) 表示方法接受java.lang.String類型的參數結束,且其前邊接受有一個任意類型參數
- 異常列表:可選,以“throws 異常全限定名列表”聲明,異常全限定名列表如有多個以“,”分割,如throws cn.matt.Exception1,cn.matt.Exception2
4)切入點表達式邏輯運算符
AOP使用 且(&&)、或(||)、非(!)來組合切入點表達式
在XML中,“&&”須使用轉義字符“&&”代替,不方便,因此Spring提供了and、or、not來代替&&、||、!
註意:替代符(and、or、not)僅在xml中可用,註解方式使用時會解析錯誤
5)execution命令 使用“execution(方法表達式)”匹配方法執行
實例:
public * *(..) 任何公共方法的執行 * cn.javass..*.*(..) cn.javass包及所有子包下任何類的任何方法 * cn.javass..IPointcutService.*(*) cn.javass包及所有子包下IPointcutService接口的任何只有一個參數方法 * cn.javass..IPointcutService+.*() cn.javass包及所有子包下IPointcutService接口及子類型的的任何無參方法 * (cn.javass..IPointcutService+&& java.io.Serializable+).*(..) 任何實現了cn.javass包及所有子包下IPointcutService接口和java.io.Serializable接口的類型的任何方法 @java.lang.Deprecated @cn.javass..Secure * *(..) 任何持有@java.lang.Deprecated和@cn.javass..Secure註解的方法 * (@cn.javass..Secure *).*(..) 任何定義方法的類型持有@cn.javass..Secure的方法
二、
Spring 使用介紹(六)—— AOP詳解