spring (pointcut)切入点表达式:
作用:主要是用于决定项目中哪些组件哪些方法需要加入通知
expression=“切入点表达式”
常用的两种:
一.execution 切入点表达式
---> 方法级别的切入点表达式 控制力度:方法级别 效率低(太精确,解析表达式时慢)
(一)execution 切入点表达式完整语法:
1.execution(访问权限修饰符 返回值 包名.类名.方法名(参数类型))
:因为在切入点一般是接口,而接口一般公开,访问权限修饰符默认public
:*为通配符
(二)示例:
1)execution(* com.cf.service.* .*(..)) 【常用】
包:com.cf.service
类:任意类
方法:任意方法
参数:任意参数
返回值:任意返回值类型
2)execution(String com.cf.service.ServiceImpl.*(..))
包:com.cf.service
类:ServiceImpl
方法:任意方法
参数:任意参数
返回值:String类型返回参数类型
3)execution(String com.cf.service.*Service * .*(String))
包:com.cf.service
类:类名中包含Service的类
方法:任意方法
参数:参数只有一个且为String类型
返回值:String类型返回参数类型
4)execution(* com.cf.service..* .*(..)) 【常用】
包:com.cf.service 及 这个包中子包,子包的子包...
类:任意
方法:任意方法
参数:任意
返回值:任意
5)execution(* *. *(..)) // 冷门:项目中全部方法
二.within切入点表达式
--->类级别的切入点表达式 控制力度:类级别 效率高
(一)within切入点表达式完整语法:
expression=“within()”
完整语法:within(包.类名)
1)within(com.cf.service.*ServiceImpl)
作用域:com.cf.service包下,以ServiceImpl为结尾的类
如果精确到方法,就选择execution 切入点表达式。如果整个类通用,就选择within切入点表达式。
规则:尽可能精准切入,避免不必要的切入