@annotation切点表达式和@execution切点表达式的区别和联系?

188 篇文章 7 订阅

@annotation 和 @execution 都是切点表达式中常用的两种方式,用于定义 AOP 切面中的切点。它们的区别和联系如下:

区别:

@annotation: 这个切点表达式使用 @annotation(注解类型) 的形式,用于匹配带有特定注解的方法。它关注的是方法上的注解,并根据注解类型来进行匹配。
@execution: 这个切点表达式使用 @execution(修饰符? 返回类型 方法名 参数列表 异常模式?) 的形式,更加灵活,可以按照方法的修饰符、返回类型、方法名、参数列表等进行匹配。它关注的是方法的签名和修饰符,并根据这些信息来进行匹配。
联系:

共同点:@annotation 和 @execution 都是用于定义切点的表达式,都可以用于匹配要拦截的方法。
可以一起使用:在某些场景下,你可能需要同时匹配方法上的注解和方法的其他特征,这时可以将 @annotation 和 @execution 结合起来使用,以实现更精确的切点匹配。
例如,假设有一个自定义注解 @Loggable,你想要拦截所有被该注解标记的方法,并且这些方法的返回类型为 void。你可以使用以下切点表达式:

使用 @annotation(com.example.Loggable) && execution(void *(..)),即同时匹配注解为 @Loggable 的方法,并且返回类型为 void。
或者使用 @annotation(com.example.Loggable) && @execution(void *(..)),即匹配带有 @Loggable 注解并且返回类型为 void 的方法。
总结起来,@annotation 关注方法上的注解类型,而 @execution 关注方法的签名和修饰符。二者可以单独或组合使用,以满足不同的切点匹配需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值