语法格式
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"/>