Spring学习笔记:AspectJ指示器

AspectJ指示器是Spring中使用AOP时,用来确定拦截对象的工具。

下面是列举常用的指示器的用法。


execution

这个最常见,他可以指定具体返回类型的方法被拦截,或者某个包下所有的方法被拦截,或者具体的某个方法等。

execution的表达式写法如下

execution(修饰符 返回类型 包名.类名.方法名(参数列表))

修饰符和返回类型可以用*表示“所有”

execution(* String com.luckincoffee.example.Test1.test(String))

这表示com.luckincoffee.example包下的Test类中返回类型是String,方法名是test,参数是String类型,修饰符不限的方法。

execution(* * com.luckincoffee.example.Test1.test(String))

这表示com.luckincoffee.example包下的Test类中返回类型不限,方法名是test,参数是String,修饰符不限的方法。

包名或方法名与*号组合

  • 一个*号表示包名和类名:这代表所有的包下的所有的类。比如下面这个表达式,代表所有的public类。
execution(public * *(..))

第一个表示任意返回值,第二个表示所有包下的所有的类和方法。

  • 一个*号表示方法名:这代表一个包下某个类的所有方法。比如下面这个表达式代表com.luckincoffee.example包下的Test类的所有方法。
execution(* * com.luckincoffee.example.Test.*(..))
  • 接口名+.*”表示方法名:这代表该接口的所有方法以及实现该接口的子类的所有方法。比如下面这个表达式表示Test接口的所有方法和所有实现Test接口的类的所有方法。注意,如果一个类A实现了Test接口中的test1方法,并且类A中还有一个方法test2不属于Test接口,那属于类A的test2方法也是被包含其中的。
execution(* * com.luckincoffee.example.Test+.*(..))
  • 方法名或包名用“*字符串”:这个以字符串结尾的方法。比如下面这个表达式,代表com.luckincoffee.example包下的Test类的所有以To结尾的方法。比如comparaTo()就属于这个规则。
execution(* * com.luckincoffee.example.Test.*To(..))

而下面这个表示所有以Dao为结尾的包中的所有方法(不包含子包中的方法)。

execution(* * com.luckincoffee.example.*Dao.*(..))
  • .*和…*表示类名和方法名:.*表示某一个包下的所有方法,不包含子类的方法。…*表示某一个包下的所有方法,包含子包的所有方法。
execution(* * com.luckincoffee.example.*(..))
  • 参数中*和…的区别:*在参数中表示任意类型但个数为1; …表示任意类型任意个数。
  • 参数中规定类型:如果类型是java.lang包下的,那么可以直接写类型名。比如下面这个表示com.luckincoffee.example包下Test类的所有参数为String的方法。
execution(* * com.luckincoffee.example.Test.*(String))

而下面这个表示com.luckincoffee.example包下Test类的所有参数为List的方法。

execution(* * com.luckincoffee.example.Test.*(java.util.List))
  • 以“参数类型+”表示参数:这个表示参数类型必须是参数及参数的子类的类型,。比如下面这个表示com.luckincoffee.example包下Test类的所有参数为Object或Object子类的方法。
execution(* * com.luckincoffee.example.Test.*(Object+))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值