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 <!-- 且:&& and --> <!-- 语法虽然没错,但,没意义 --> 23 <aop:pointcut expression="execution(* com.shore.dao.impl.UserDao.save(..)) && 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 欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!) |
原文地址:https://www.cnblogs.com/dshore123/p/11823849.html