JavaWeb——AOP进阶(3/5)-切入点表达式-execution(概述、主要形式、语法与用法、实例、通配符详解)

目录

一、切入点表达式概述

1、基本概念

2、主要形式

二、execution 表达式语法与用法

1、基本语法结构

2、省略项说明

2.1 可省略部分

2.2 实践建议

三、表达式实例与演示

1、单方法匹配

2、参数匹配

3、省略修饰符和类名的匹配示例

四、通配符详解

1、* 通配符

1.1 作用

1.2 示例

2、.. 通配符

2.1 作用

2.2 示例

五、组合表达式

1、或(||)组合

2、匹配多个目标

六、书写建议与总结

1、书写建议

1.1 方法名规范

1.2 基于接口而非实现类

1.3 缩小匹配范围

2、总结


一、切入点表达式概述

1、基本概念

切入点表达式用于描述哪些方法是通知要作用的目标方法。在 AOP 开发中,切入点表达式不可或缺。

2、主要形式

  • execution 表达式:通过方法签名进行匹配(本篇重点)

  • 注解型表达式:通过方法上的注解进行匹配(后续文章讲解)


二、execution 表达式语法与用法

1、基本语法结构

execution([修饰符] 返回值类型 包名.类名.方法名(参数) throws 异常)

2、省略项说明

2.1 可省略部分

  • 方法修饰符(如 public)

  • 包名和类名(不建议省略)

  • 异常声明(如 throws,注意是方法上声明抛出的异常,不是实际抛出的异常)

2.2 实践建议

  • 通常省略修饰符和异常声明

  • 包名类名建议保留,避免匹配范围过大导致效率下降


三、表达式实例与演示

1、单方法匹配

使用完整签名精确匹配一个方法,例如:

execution(* com.example.service.impl.DemoService.save(com.example.domain.User))

2、参数匹配

  • (String):一个 String 类型参数

  • (..):任意类型任意数量参数

  • (String, ..):以 String 开头的多个参数

3、省略修饰符和类名的匹配示例

  • 省略修饰符:

execution(* com.example..*.save(..))
  • 省略包名、类名(不推荐):

execution(* save(..))

四、通配符详解

1、* 通配符

1.1 作用

  • 匹配一个单独任意字符(如方法名、类名、返回值等)

1.2 示例

execution(* *Service.*(..))

2、.. 通配符

2.1 作用

  • 匹配任意数量、任意类型的参数

  • 匹配任意层级的包结构

2.2 示例

  • 任意层级包:

execution(* com..*.save(..))
  • 任意参数:

execution(* save(..))

五、组合表达式

1、或(||)组合

可匹配多个不同的方法:

execution(* list(..)) || execution(* save(..))

2、匹配多个目标

  • 组合方式可用于同时匹配 list()save(String) 等多个方法


六、书写建议与总结

1、书写建议

1.1 方法名规范

  • 建议:查询以 find 开头、更新以 update 开头等,方便统一匹配

1.2 基于接口而非实现类

  • 利于扩展,实现变更不影响表达式匹配

1.3 缩小匹配范围

  • 避免使用 .. 匹配所有包层级

  • 包名、类名不建议省略

2、总结

  • execution 表达式功能强大,语法灵活

  • 注意控制匹配粒度,以保证性能

  • 通配符 *.. 是常用关键要素


END


学习自:黑马程序员——JavaWeb课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值