Spring AOP 参数绑定
参数绑定图解
在网上看到一张图,是关于切点匹配到的方法的参数如何绑定到切面的方法中。
从 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() {}
有问题吗?点此反馈!
温馨提示:反馈需要登录