简述

由于Spring切面粒度最小是达到方法级别,而execution表达式可以用于明确指定方法返回类型,类名,方法名和参数名等与方法相关的部件,并且在Spring中,大部分需要使用AOP的业务场景也只需要达到方法级别即可,因而execution表达式的使用是最为广泛的。

表达式组成

基础语法结构

如下是execution表达式的语法:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)

这里问号表示当前项可以有也可以没有,其中各项的语义如下:

modifiers-pattern:方法的可见性,如public,protected;

ret-type-pattern:方法的返回值类型,如int,void等;

declaring-type-pattern:方法所在类的全路径名,如com.spring.Aspect;

name-pattern:方法名类型,如buisinessService();

param-pattern:方法的参数类型,如java.lang.String;

throws-pattern:方法抛出的异常类型,如java.lang.Exception;

如下是一个使用execution表达式的例子:

execution(public * com.spring.service.BusinessObject.businessService(java.lang.String,..))

上述切点表达式将会匹配使用public修饰,返回值为任意类型,并且是com.spring.BusinessObject类中名称为businessService的方法,方法可以有多个参数,但是第一个参数必须是java.lang.String类型的方法。上述示例中我们使用了..通配符。

关于通配符的类型

主要有两种:

* 通配符,该通配符主要用于匹配单个单词,或者是以某个词为前缀或后缀的单词。

.. 通配符,该通配符表示0个或多个项,主要用于declaring-type-pattern和param-pattern中,如果用于declaring-type-pattern中,则表示匹配当前包及其子包,如果用于param-pattern中,则表示匹配0个或多个参数

* 通配符案例

如下示例表示返回值为任意类型,在com.spring.service.BusinessObject类中,并且参数个数为零的方法:

execution(* com.spring.service.BusinessObject.*())

下述示例表示返回值为任意类型,在com.spring.service包中,以Business为前缀的类,并且是类中参数个数为零方法:

execution(* com.spring.service.Business*.*())

.. 通配符案例

如下示例表示匹配返回值为任意类型,并且是com.spring.service包及其子包下的任意类的名称为businessService的方法,而且该方法不能有任何参数:

execution(* com.spring.service..*.businessService())

这里需要说明的是,包路径service...businessService()中的..应该理解为延续前面的service路径,表示到service路径为止,或者继续延续service路径,从而包括其子包路径;后面的.businessService(),这里的*表示匹配一个单词,因为是在方法名前,因而表示匹配任意的类。

如下示例是使用..表示任意个数的参数的示例,需要注意,表示参数的时候可以在括号中事先指定某些类型的参数,而其余的参数则由..进行匹配:

execution(* com.spring.service.BusinessObject.businessService(java.lang.String,..))

java 切面详解_Spring AOP 切面表达式语法详解相关推荐

  1. Spring 之AOP AspectJ切入点语法详解(最全了,不需要再去其他地找了)---zhangkaitao

    Spring 之AOP AspectJ切入点语法详解(最全了,不需要再去其他地找了) http://jinnianshilongnian.iteye.com/blog/1415606    --zha ...

  2. Java手写Spring的AOP(切面织入)小Demo--盲僧代理击飞 亚索接大实例

    在学习Spring的过程中总会很迷茫,打个@Aspect注解切面功能就有了,只要脱离了框架感觉自己还是什么都没会,所以自己猜了一下切面的思路,大概写了个小Demo,欢迎交流. 涉及知识:JDK动态代理 ...

  3. java模块详解_Spring之IOC核心模块详解

    Spring IOC简述 IOC称为控制反转,也有一种说法叫DI(依赖注入).IOC也是spring最核心的模块,Spring的所有工作几乎都围绕着IOC展开. 什么是控制反转呢?简单的说,控制反转就 ...

  4. Thymeleaf 标准表达式语法详解

    Thymeleaf 表达式汇总 首先先加入命名空间 <html xmlns:th="http://www.thymeleaf.org"> 编号 属性 描述 示例 1 $ ...

  5. aop springboot 传入参数_java相关:springboot配置aop切面日志打印过程解析

    java相关:springboot配置aop切面日志打印过程解析 发布于 2020-3-31| 复制链接 摘记: 这篇文章主要介绍了springboot配置aop切面日志打印过程解析,文中通过示例代码 ...

  6. Springboot AOP切面

    文章目录 SpringBoot Aop 切面(Aop) 一.什么是切面 二.切面的用途 三.AOP切面常用注解 四.详细内容 1.切面(Aspect) 2.连接点(Joinpoint) 3.通知(Ad ...

  7. Lambada表达式全面详解

    Lambada表达式全面详解 文章目录 Lambada表达式全面详解 前言 入门 类名引用静态方法 对像名引用方法 构造器引用 前言 Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿 ...

  8. ROS学习:URDF语法详解一link篇

    ROS学习:URDF语法详解一link篇 1.概述 1.1 URDF语法详解_robot 1.2 URDF语法详解_link 1.2.3.案例需求:分别生成长方体.圆柱与球体的机器人部件 1.概述 参 ...

  9. java切面不需要接口了吗_详解Spring AOP 实现“切面式”valid校验

    why: 为什么要用aop实现校验? answer: spring mvc 默认自带的校验机制 @Valid + BindingResult, 但这种默认实现都得在Controller方法的中去接收B ...

最新文章

  1. JAVA环境变量配置与配置后CMD的使用
  2. LeetCode-笔记-45.跳跃游戏II-贪心算法
  3. 使用DOM读取和维护XML数据
  4. js中onload和jQuery中的ready区别
  5. 缓存redis的实现思路
  6. find out the service list changed with given user which have item category group
  7. 华为云空间联系人是不是机主_华为Mate 30系列国内发布 超强隐私安全保护放大招...
  8. == 和 === 有什么区别
  9. vue.3.0 dom赋值_Vue 3.0 快速入门
  10. 基于HTML5的WebGL实现的2D3D迷宫小游戏
  11. 汇川plc c语言,汇川plc编程软件-汇川plc编程软件autoshop下载 v2.92官方版--pc6下载站...
  12. PMP试题 | 每日一练,快速提分 8.5
  13. LCD12864 并口和串口通用程序
  14. Android:答题APP的设计与实现(mysql+jsp+Android)
  15. 中兴网络设备交换机路由器查看MC-LAG状态检查命令方法
  16. Mongodb安装教程
  17. ANSI、C99、C11 标准区别详解
  18. XXL-JOB原理--任务调度中心执行器注册(三)
  19. C语言小游戏->井字棋
  20. 北师大的计算机科学专业排名,2021北京师范大学王牌优势专业排名 什么专业最好...

热门文章

  1. 关于js中的eval函数
  2. c语言只读文件若文件存在,3,C语言文件读写
  3. 网络虚拟化——virtio
  4. 【OpenGL】笔记十三、光照贴图
  5. hyperlynx 过孔建模和HFSS建模做对比
  6. python趣味编程示例_python趣味编程100例(99个)
  7. (转)悲催IT男的心酸恋爱史
  8. 基于spss的多变量时间序列的ARIMA模型
  9. android手机寿命,国产安卓手机的寿命真的只有一年?
  10. 小米手机系统服务组件是干什么的_大佬手机刷入win10系统开机 小米8多少原生系统可以尝鲜...