spring AOP切点表达式总结

切点表达式格式详解
在Spring AOP中,@Around注解的切点表达式遵循AspectJ切点表达式语法,其核心结构为:
指示符(匹配模式),通过逻辑运算符组合多个条件。以下是具体规则和示例:

一、基础语法结构

  1. 执行匹配(最常用)
    execution([访问修饰符] 返回类型 [类路径]. [异常类型]) 示例:
    execution(* com.example.service..(…))
    * 匹配任意返回类型
    com.example.service.*:匹配该包下所有类
    .*(…):匹配所有方法(任意方法名+任意参数)
  2. 其他常用指示符
    在这里插入图片描述

二、逻辑运算符
通过 &&(与)、||(或)、!(非)组合条件:

@Around("execution(* com.example.service.*.*(..)) &&@annotation(com.example.Transactional)")  

表示:匹配service包下所有方法,且方法被@Transactional注解修饰。

三、常见表达式示例

  1. 匹配Service层所有public方法:
execution(public * com.example.service.*.*(..))  
  1. 匹配特定注解的方法:
@annotation(com.example.Cacheable)  
  1. 匹配参数为String类型的方法:
args(java.lang.String)  
  1. 排除某些方法:
execution(* com.example.service.*.*(..)) && !execution(* com.example.service.UserService.delete*(..))  

四、注意事项

  1. 性能优化:
    避免过于宽泛的表达式(如execution(* .(…))),尽量缩小匹配范围。
  2. 包路径准确性:
    使用完整包路径(如com.example而非example),避免因路径模糊导致匹配失败。
  3. 访问修饰符默认规则:
    若省略访问修饰符(如execution(* *(…))),默认匹配public方法。

五、进阶技巧

  1. 组合注解匹配:
@Around("@within(org.springframework.stereotype.Service)")  

匹配所有被@Service注解的类中的方法。
2. 通过接口匹配:

execution(* com.example.service.UserService+.*(..))  

匹配UserService接口及其实现类的方法。
通过合理设计切点表达式,可精准控制切面的作用范围,提升代码可维护性和性能。建议通过AOP调试工具(如Spring AOP Proxy Logging)验证表达式匹配结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值