切入点表达式

为了能够灵活定义切入点位置,Spring AOP提供了多种切入点指示符。

execution———用来匹配执行方法的连接点

语法结构: execution( 方法修饰符 方法返回值 方法所属类 匹配方法名 ( 方法中的形参表 ) 方法申明抛出的异常 )

其中红色字体的部分时不能省略的,各部分都支持通配符 “*” 来匹配全部。

比较特殊的为形参表部分,其支持两种通配符:

“*”:代表一个任意类型的参数;

“..”:代表零个或多个任意类型的参数。

例如:

()匹配一个无参方法

(..)匹配一个可接受任意数量参数和类型的方法

(*)匹配一个接受一个任意类型参数的方法

(*,Integer)匹配一个接受两个参数的方法,第一个可以为任意类型,第二个必须为Integer。

下图是一些execution的使用实例:

rr

within————通过类匹配模式申明切入点(只能通过类型匹配连接点)

例如:within(aop_part..*)

表示匹配包aop_part以及子包的所有方法

由于execution可以匹配包、类、方法,而within只能匹配包、类,因此execution完全可以代替within的功能。

this————限定AOP代理必须时指定类型的实例,用于匹配该对象的所有连接点

例如:this(aop_part.service.GodService)

表示匹配了GodService接口的代理对象的所有连接点

target————通过判断目标类的类型确定判断的是否匹配

this通过判断代理类的类型来决定是否和切入点匹配,两者限定的对象都是指定类型的实例。

例如: target(aop_part.service.GodService)

表示匹配实现了GodService接口的目标对象的所有连接点

args————用于对连接点的参数类型进行限制,要求参数类型时指定类型的实例

例如:args(aop_part.service)

表示匹配时,出入的参数类型时service的方法

其与execution(**(aop_part.service))的区别为,execution针对的时方法签名,而args针对的是运行时的实际参数类型。

例:

args既匹配buyGoods(service newService),也匹配buyGoods(Buyservice newService) <Buyservice为service的子类>

execution只匹配buyGoods(service newService)

组合切入点

支持 &&、 || 、!

与其他语言所代表的意思相同

例:args(aop_part.service) &&execution(**(aop_part.service))

0%