語法格式
execution(修飾符 返回類型 切入點類 切入點方法(參數) 異常拋出)
修飾符: 可選,支持通配符,(public/private/protected)
返回類型: 必填,支持通配符,可以使用 * 來匹配所有的返回值類型
切入點類: 可選,支持通配符,指定切入點類
切入點方法: 必填,支持通配符,指定要匹配的方法名,可以使用"*"通配符來匹配所有方法
參數: 若無可不填,指定方法聲明中的形參列表,支持兩個通配符,即*和…
其中*代表一個任意類型的參數,而…代表零個或多個任意類型的參數
() 匹配一個不接受任何參數的方法
(…) 匹配一個接受任意數量參數的方法,可以是零個或多個
(*) 匹配一個接受一個任何類型的參數的方法,只能是一個
(*,String) 匹配一個接受兩個參數的方法,其中第一個參數是任意類型,第二個參數必須是String類型
異常拋出: 可選,支持通配符,指定方法聲明拋出的異常
常用實例
<!-- 【1、攔截所有public方法】 -->
<aop:pointcut expression="execution(public * *(..))" id="pt"/>
<!-- 【2、攔截所有save開頭的方法】 -->
<aop:pointcut expression="execution(* save*(..))" id="pt"/>
<!-- 【3、攔截指定類的指定方法, 攔截時候一定要定位到方法】 -->
<aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..))" id="pt"/>
<!-- 【4、攔截指定類的所有方法】 -->
<aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.*(..))" id="pt"/>
<!-- 【5、攔截指定包,以及其自包下所有類的所有方法】 -->
<aop:pointcut expression="execution(* com..*.*(..))" id="pt"/>
<!-- 【6、多條件】 -->
<!-- 或:|| or -->
<aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) || execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />
<aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) or execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />
<!-- 且:&& and --> <!-- 語法雖然沒錯,但,沒意義 -->
<aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) && execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />
<aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) and execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />
<!-- 【7、取非值:not ! 不攔截指定的規則,攔截除此之外的所有類的方法】 -->
<aop:pointcut expression="!execution(* com.shore.dao.impl.UserDao.save(..))" id="pt"/> <!-- 注意not前必須有空格 -->
<aop:pointcut expression=" not execution(* com.shore.dao.impl.UserDao.save(..))" id="pt"/>