1. 程式人生 > >Spring 使用介紹(六)—— AOP詳解

Spring 使用介紹(六)—— AOP詳解

表示 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詳解