Java进阶知识22 Spring execution 切入点表达式

1、概述        

  切入点(execution ):可以对指定的方法进行拦截,从而给指定的类生成代理对象。(拦截谁,就是在谁那里切入指定的程序/方法)

  格式:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)

参数解析:

  modifiers-pattern?:指定方法的修饰符,支持通配符,该部分可以省略。(public/private/protected
  ret-type-pattern:指定方法的返回值类型,支持通配符,可以使用 * 来匹配所有的返回值类型。
  declaring-type-pattern?:指定方法所属的,支持通配符,该部分可以省略。(要切入的类:class
  name-pattern:指定要匹配的方法名,支持通配符,可以使用"*"通配符来匹配所有方法。(要切入的方法
  param-pattern:指定方法声明中的形参列表,支持两个通配符,即"*"和"..",其中“*”代表一个任意类型的参数,而“..”代表零个或多个任意类型的参数。例如,() 匹配一个不接受任何参数的方法,而(..) 匹配一个接受任意数量参数的方法,(*)匹配了一个接受一个任何类型的参数的方法,(*,String)匹配了一个接受两个参数的方法,其中第一个参数是任意类型,第二个参数必须是String类型。(要切入的方法的参数列表
  throws-pattern:指定方法声明抛出的异常,支持通配符,该部分可以省略。

切入点语法常用的几种:

 1 <!-- 切入点表达式语法: -->
 2 <!-- 【1、拦截所有public方法】 -->
 3 <aop:pointcut expression="execution(public * *(..))" id="pt"/> 
4
5 <!-- 【2、拦截所有save开头的方法】 --> 6 <aop:pointcut expression="execution(* save*(..))" id="pt"/>
7
8 <!-- 【3、拦截指定类的指定方法, 拦截时候一定要定位到方法】 --> 9 <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..))" id="pt"/> 10 11 <!-- 【4、拦截指定类的所有方法】 --> 12 <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.*(..))" id="pt"/>
13 14 <!-- 【5、拦截指定包,以及其自包下所有类的所有方法】 --> 15 <aop:pointcut expression="execution(* com..*.*(..))" id="pt"/>
16 17 <!-- 【6、多条件】 --> 18 <!-- 或:|| or --> 19 <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) || execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />
20 <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) or execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />
21 22 <!-- 且:&amp;&amp; and --> <!-- 语法虽然没错,但,没意义 --> 23 <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) &amp;&amp; execution(* com.bw.dao.impl.MessageDao.save(..))" id="pt" /> 24 <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) and execution(* com.shore.dao.impl.MessageDao.save(..))" id="pt" />
25 26 <!-- 【7、取非值:not ! 不拦截指定的规则,拦截除此之外的所有类的方法】 --> 27 <aop:pointcut expression="!execution(* com.shore.dao.impl.UserDao.save(..))" id="pt"/>
28 <!-- 注意not前必须有空格 --> 29 <aop:pointcut expression=" not execution(* com.shore.dao.impl.UserDao.save(..))" id="pt"/>

2、实例        

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:https://www.cnblogs.com/dshore123/p/11823849.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

猜你喜欢

转载自www.cnblogs.com/dshore123/p/11823849.html