AOP-切入点语法一览

1.execution表达式

execution是最灵活的切入点表达式

1.1 execution表达式格式

execution(修饰符 返回类型 切入点类 切入点方法(参数) 异常抛出)
  • 修饰符: 可选,支持通配符,(public/private/protected)
  • 返回类型: 必填,支持通配符,可以使用 * 来匹配所有的返回值类型
  • 切入点类: 可选,支持通配符,指定切入点类
  • 切入点方法: 必填,支持通配符,指定要匹配的方法名,可以使用"*"通配符来匹配所有方法
  • 参数: 若无可不填,指定方法声明中的形参列表,支持两个通配符,即*和…
execution(
	modifiers-pattern                           -- 修饰符 非必填
	ret-type-pattern                            -- 返回类型 必填 
	declaring-type-pattern                      -- 切入点类 非必填
	name-pattern(param-pattern)               -- 切入点方法(参数)  必填
	throws-pattern                              -- 异常抛出 非必填
)

其中*代表一个任意类型的参数,而…代表零个或多个任意类型的参数

() 匹配一个不接受任何参数的方法
(..) 匹配一个接受任意数量参数的方法,可以是零个或多个
(*) 匹配一个接受一个任何类型的参数的方法,只能是一个
(*,String) 匹配一个接受两个参数的方法,其中第一个参数是任意类型,第二个参数必须是String类型

异常抛出: 可选,支持通配符,指定方法声明抛出的异常

1.1.1 modifiers-pattern 修饰符

execution(public void cn.itcast.e_xml.a_before.UserServiceImpl.saveUser(java.lang.String,java.lang.String))
表示:共有方法,无返回类型,cn.itcast.e_xml.a_before包中的UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型

execution(protected void cn.itcast.e_xml.a_before.UserServiceImpl.saveUser(java.lang.String,java.lang.String))
表示:私有方法,无返回类型,cn.itcast.e_xml.a_before包中的UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型

注意:AOP无法拦截private方法(所以修饰符不会是private)

  • 如果是接口实现类(使用jdk代理),私有方法必然不会存在于接口中,所以不会被拦截
  • 如果是一般类(使用cglib代理),private方法不能被子类实现,不会出现在子类中,也不能拦截

修饰符是可以省略的,省略后AOP就不会对修饰符进行限定(所有修饰符都可以切)
在这里插入图片描述

1.1.2 ret-type-pattern 返回类型(必填项)

execution(void cn.itcast.e_xml.a_before.UserServiceImpl.saveUser(java.lang.String,java.lang.String))
表示:无返回类型,cn.itcast.e_xml.a_before包中的UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型

execution(java.lang.String cn.itcast.e_xml.a_before.UserServiceImpl.saveUser(java.lang.String,java.lang.String))
表示:返回类型String类型,cn.itcast.e_xml.a_before包中的UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型

execution(* cn.itcast.e_xml.a_before.UserServiceImpl.saveUser(java.lang.String,java.lang.String))
表示:返回类型任意,cn.itcast.e_xml.a_before包中的UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型

例子:拦截所有返回值为int的方法
在这里插入图片描述

1.1.3 declaring-type-pattern 切入点类

表示包,或者子包的,或者类的修饰符

execution(* cn.itcast.e_xml.a_before.UserServiceImpl.saveUser(java.lang.String,java.lang.String))
表示返回类型任意,cn.itcast.e_xml.a_before包中的UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型

execution(* cn.itcast.e_xml.*.UserServiceImpl.saveUser(java.lang.String,java.lang.String))
表示返回类型任意,cn.itcast.e_xml包中的所有子包,包中UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型

execution(* cn.itcast.e_xml.*.saveUser(java.lang.String,java.lang.String))
表示返回类型任意,cn.itcast.e_xml包中的所有类,类中的saveUser方法,参数2个,都是String类型

execution(* cn.itcast.e_xml..*.saveUser(java.lang.String,java.lang.String))
表示返回类型任意,cn.itcast.e_xml包中及其子包中的所有类,类中的saveUser方法,参数2个,都是String类型

execution(* *.saveUser(java.lang.String,java.lang.String))
 表示返回类型任意,所有包中的所有类,类中的saveUser方法,参数2个,都是String类型
 
execution(* saveUser(java.lang.String,java.lang.String))
表示返回类型任意,所有包中的所有类,类中的saveUser方法,参数2个,都是String类型

1.1.4 name-patter 切入点方法(必填项)

方法的名称

execution(* cn.itcast.e_xml.a_before.UserServiceImpl.saveUser(java.lang.String,java.lang.String))
表示返回类型任意,cn.itcast.e_xml.a_before包中的UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型

execution(* cn.itcast.e_xml.a_before.UserServiceImpl.save*(java.lang.String,java.lang.String))
表示返回类型任意,cn.itcast.e_xml.a_before包中的UserServiceImpl类,类中的以save开头的方法,参数2个,都是String类型

execution(* cn.itcast.e_xml.a_before.UserServiceImpl.*(java.lang.String,java.lang.String))
表示返回类型任意,cn.itcast.e_xml.a_before包中的UserServiceImpl类,类中的所有方法,参数2个,都是String类型

方法的参数

execution(* cn.itcast.e_xml.a_before.UserServiceImpl.saveUser(java.lang.String,java.lang.String))
表示返回类型任意,cn.itcast.e_xml.a_before包中的UserServiceImpl类,类中的saveUser方法,参数2个,都是String类型

execution(* cn.itcast.e_xml.a_before.UserServiceImpl.saveUser(java.lang.String,java.lang.Integer))
表示返回类型任意,cn.itcast.e_xml.a_before包中的UserServiceImpl类,类中的saveUser方法,参数2个,参数1String类型,参数二是Integer

execution(* cn.itcast.e_xml.a_before.UserServiceImpl.saveUser(java.lang.String,*))
表示返回类型任意,cn.itcast.e_xml.a_before包中的UserServiceImpl类,类中的saveUser方法,参数2个,参数1String类型,参数二是任意类型

execution(* cn.itcast.e_xml.a_before.UserServiceImpl.saveUser(*))
表示返回类型任意,cn.itcast.e_xml.a_before包中的UserServiceImpl类,类中的saveUser方法,参数1个,参数是任意类型

execution(* cn.itcast.e_xml.a_before.UserServiceImpl.saveUser())
表示返回类型任意,cn.itcast.e_xml.a_before包中的UserServiceImpl类,类中的saveUser方法,没有参数

execution(* cn.itcast.e_xml.a_before.UserServiceImpl.saveUser(..))
表示返回类型任意,cn.itcast.e_xml.a_before包中的UserServiceImpl类,类中的saveUser方法,参数任意(可以是0个,也可以多个)

1.1.5 throws-pattern 抛出异常

1.2 常用表达式

execution(* cn.itcast.procject.service..*.*(..))
返回类型任意,cn.itcast.procject.service包及其子包中所有类,类中所有方法,参数任意

execution(* *..*.*(..))
返回类型任意,任意包中及其子包中所有类,类中所有方法,参数任意

execution(* *(..))
返回类型任意,任意包中及其子包中所有类,类中所有方法,参数任意

execution(public * *(..))
任意公共方法的执行

execution(* set*(..))
任何一个名字以“set”开始的方法的执行:

execution(* com.xyz.service.AccountService.*(..))
AccountService接口定义的任意方法的执行:

execution(* com.xyz.service.*.*(..))
在service包中定义的任意方法的执行:

execution(* com.xyz.service..*.*(..))
在service包或其子包中定义的任意方法的执行:

整理的Spring AOP AspectJ切入点语法 欢迎补充

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值