java 切面详解_Spring AOP 切面表达式语法详解
简述
由于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 切面表达式语法详解相关推荐
- Spring 之AOP AspectJ切入点语法详解(最全了,不需要再去其他地找了)---zhangkaitao
Spring 之AOP AspectJ切入点语法详解(最全了,不需要再去其他地找了) http://jinnianshilongnian.iteye.com/blog/1415606 --zha ...
- Java手写Spring的AOP(切面织入)小Demo--盲僧代理击飞 亚索接大实例
在学习Spring的过程中总会很迷茫,打个@Aspect注解切面功能就有了,只要脱离了框架感觉自己还是什么都没会,所以自己猜了一下切面的思路,大概写了个小Demo,欢迎交流. 涉及知识:JDK动态代理 ...
- java模块详解_Spring之IOC核心模块详解
Spring IOC简述 IOC称为控制反转,也有一种说法叫DI(依赖注入).IOC也是spring最核心的模块,Spring的所有工作几乎都围绕着IOC展开. 什么是控制反转呢?简单的说,控制反转就 ...
- Thymeleaf 标准表达式语法详解
Thymeleaf 表达式汇总 首先先加入命名空间 <html xmlns:th="http://www.thymeleaf.org"> 编号 属性 描述 示例 1 $ ...
- aop springboot 传入参数_java相关:springboot配置aop切面日志打印过程解析
java相关:springboot配置aop切面日志打印过程解析 发布于 2020-3-31| 复制链接 摘记: 这篇文章主要介绍了springboot配置aop切面日志打印过程解析,文中通过示例代码 ...
- Springboot AOP切面
文章目录 SpringBoot Aop 切面(Aop) 一.什么是切面 二.切面的用途 三.AOP切面常用注解 四.详细内容 1.切面(Aspect) 2.连接点(Joinpoint) 3.通知(Ad ...
- Lambada表达式全面详解
Lambada表达式全面详解 文章目录 Lambada表达式全面详解 前言 入门 类名引用静态方法 对像名引用方法 构造器引用 前言 Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿 ...
- ROS学习:URDF语法详解一link篇
ROS学习:URDF语法详解一link篇 1.概述 1.1 URDF语法详解_robot 1.2 URDF语法详解_link 1.2.3.案例需求:分别生成长方体.圆柱与球体的机器人部件 1.概述 参 ...
- java切面不需要接口了吗_详解Spring AOP 实现“切面式”valid校验
why: 为什么要用aop实现校验? answer: spring mvc 默认自带的校验机制 @Valid + BindingResult, 但这种默认实现都得在Controller方法的中去接收B ...
最新文章
- JAVA环境变量配置与配置后CMD的使用
- LeetCode-笔记-45.跳跃游戏II-贪心算法
- 使用DOM读取和维护XML数据
- js中onload和jQuery中的ready区别
- 缓存redis的实现思路
- find out the service list changed with given user which have item category group
- 华为云空间联系人是不是机主_华为Mate 30系列国内发布 超强隐私安全保护放大招...
- == 和 === 有什么区别
- vue.3.0 dom赋值_Vue 3.0 快速入门
- 基于HTML5的WebGL实现的2D3D迷宫小游戏
- 汇川plc c语言,汇川plc编程软件-汇川plc编程软件autoshop下载 v2.92官方版--pc6下载站...
- PMP试题 | 每日一练,快速提分 8.5
- LCD12864 并口和串口通用程序
- Android:答题APP的设计与实现(mysql+jsp+Android)
- 中兴网络设备交换机路由器查看MC-LAG状态检查命令方法
- Mongodb安装教程
- ANSI、C99、C11 标准区别详解
- XXL-JOB原理--任务调度中心执行器注册(三)
- C语言小游戏->井字棋
- 北师大的计算机科学专业排名,2021北京师范大学王牌优势专业排名 什么专业最好...