execution 表达式
学习Spring中的aop组装切面时遇到的execution表达式,下面是execution表达式的详解
切入点表达式:
整个表达式可以分为五个部分:
1、execution(): 表达式主体。
2、第一个*号:方法返回类型, *号表示所有的类型。
3、包名:表示需要拦截的包名。
4、第二个*号:表示类名,*号表示所有的类。
5、*(..):最后这个星号表示方法名,*号表示所有的方法,后面( )里面表示方法的参数,两个句点表示任何参数
execution(* 包名.*.*(..))
规范写法:execution(* com.baizhi.service.UserServiceImpl.*(..))重点 最通用的 //执行接口下的所有接口方法
===========================================================================================
书写接口实现方法:UserServiceImpl
方法类型:add(); query(); add(String name); add(User user); add(String name,Integer age);
execution(* service.UserServiceImpl.add(..)) //执行add()方法
execution(* service.UserServiceImpl.add(String)) //执行add(String name)方法
execution(* service.UserServiceImpl.add(com.baizhi.entity.User)) //执行add(User user)方法
execution(* service.UserServiceImpl.add(String , Integer)) //执行add(String name,Interger age)方法
execution表达式的一般用法:
execution(* service.UserServiceImpl.*(java.util.List))
返回值:任意
包:com.baizhi.service
类:UserServiceImpl
方法:任意
参数:必须是List集合
execution(* service.UserServiceImpl.add*(..)) 重点
返回值:任意
包:com.baizhi.service
类:UserServiceImpl
方法:以add关键字开头的方法
参数:任意
execution(* service.UserServiceImpl.*.*(..)) 重点
返回值:任意
包:com.baizhi.service
类:当前包下的所有类
方法:所有类中的所有方法
参数:任意
execution(* service..*.*(..)) 重点
返回值:任意
包:service包以及它下面所有子包
类:所有包中的所有类
方法:所有类中的所有方法
参数:任意
execution(* *(..)) 重点 不建议这样写 栈溢出
注意:
要尽可能精准的切入