pointcut 中 this 和 target的区别

在Spring AOP中,thistarget是两种用于定义切点(Pointcut)的指示符,它们的主要区别在于它们所匹配的对象类型不同。

this指示符用于匹配当前AOP代理对象的执行方法。这里的“代理对象”是指Spring AOP在运行时为被代理对象(即目标对象)创建的代理实例。因此,this关注的是代理对象的类型。由于代理对象可能会实现一些额外的接口(例如,用于支持AOP的接口),所以使用this时可能会匹配到这些接口中的方法,即使这些方法在目标对象本身中并不存在。

相比之下,target指示符用于匹配当前目标对象的执行方法。这里的“目标对象”是指被Spring AOP代理的实际业务对象。因此,target关注的是目标对象的类型,而不是代理对象的类型。由于target直接关注目标对象,所以它不会匹配到代理对象可能实现的额外接口中的方法。

举个例子来说明:

假设我们有一个接口MyInterface和一个实现了该接口的类MyClass。Spring AOP为MyClass的实例创建了一个代理对象。现在,如果我们想要拦截所有实现了MyInterface的方法调用,我们应该使用target(MyInterface),因为我们要匹配的是目标对象(即MyClass的实例)是否实现了MyInterface。而如果我们使用this(MyInterface),则可能会因为代理对象实现了额外的接口而导致不期望的匹配。

总结来说,thistarget的主要区别在于它们关注的对象类型不同:this关注代理对象的类型,而target关注目标对象的类型。因此,在选择使用哪个指示符时,需要根据你的具体需求来确定。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值