Spring AOP 参数绑定

Last Modified: 2022/10/29

参数绑定图解

在网上看到一张图,是关于切点匹配到的方法的参数如何绑定到切面的方法中。

spring aop params binding

从 Pointcut 的 argNames 配合方法 sayHi 方法签名可以看出,参数 k 的类型是 int,参数 t 的类型为 String。从 args(*,t,k,...) 可以看出匹配的方法至少包含三个参数,其中第二个参数类型为 String,第三个参数类型为 int。

切点

在 Spring AOP 中,需抓住一个重点,无论什么表达式,他们最终目的都是为了匹配方法

this vs target

在 spring aop 中,this 和 target 的区别在于,this 作用的对象是代理之后的对象,而 target 作用的是被 proxy 的对象本身。Aspectj 中 this 和 target 是同一回事。

@within vs @annotation

@within 和 @annotation 都接收一个 annotation 类型的参数,但是 @within 指的是方法的类上有指定的 annotation,@annotation 指的方法本身有指定的 annotation。

一些切点的例子

// 匹配任意公共方法
@Pointcut("execution(public * *(..))")
private void anyPublicOperation() {} 
// 匹配com.xyz.myapp.trading包中的方法
@Pointcut("within(com.xyz.myapp.trading..*)")
private void inTrading() {} 
// 匹配com.xyz.myapp.trading包中的方法 且是公共方法
@Pointcut("anyPublicOperation() && inTrading()")
private void tradingOperation() {} 
有问题吗?点此反馈!

温馨提示:反馈需要登录