AOP切点表达式及通知类参数传递方式
1.切入点表达式的写法
execution( * com.itheima.service.impl.StudentServiceImpl.findAll(…)) //较少
execution( * com.itheima.service.impl.StudentServiceImpl.(…)) //较少
execution( * com.itheima.service.StudentService.(…)) //StudentService中的所有方法会被代理,比较常用
execution( * com…StudentService.(…)) //StudentService中的所有方法会被代理,比较常用
execution( * com…service..*(…)) //com包下的所有子包下的service包中的所有类的所有方法,比较常用
2.通知类型
- 前置通知:在目标方法执行之前执行
- 后置通知/后置返回通知:在目标方法调用之后执行
- 异常通知/后置异常通知:在调用目标方法出现异常时执行
- 最终通知:调用目标方法不管是否出现异常,都会执行,相当于finally中的代码
- 环绕通知:是Spring给我们提供的一种手动调用目标对象方法或者其他通知方法的方式
以上前四种通知无法阻止目标方法调用,目标方法是由Spring来控制
环绕通知可以代替以上四种通知,但是上面四种通知不能代表环绕通知
通知使用说明:要么单独使用环绕通知,要么组合其他四种通知组合使用,两种方案二选一
3 在通知中获取目标方法的参数、返回值、异常信息
<1>前置通知中获取目标方法的参数
- 方式一:jp.getArgs();获取数组
public void before(JoinPoint jp){//获取请求参数//doBefore(jp.getArgs());Object[] args = jp.getArgs();System.out.println("args = " + Arrays.toString(args));//前置通知:开启事务System.out.println("Advice前置通知:开启事务");
}
- 方式二:已知参数类型,直接传递,如果目标方法没有传参,则不执行该通知方法
对应的切点表达式的参数名/参数类型要和通知方法参数名一致,增强的目标方法参数类型要和它们一致
“execution(* com.itheima.service.impl..(…))&&args(x)”
// 如果目标方法没有传参,则不执行@Before("execution(* com.itheima.service.impl.*.*(..))&&args(x)")public void before(int x) {//前置通知:开启事务System.out.println("前置通知:开启事务" + x);}
注:五种通知方法中都可以获取参数,前四种可以通过方式二获取
<2>后置通知中获取目标方法的结果/返回值
说明:后置通知方法的形参变量名要和配置中的returning="ret"属性值一样
<3>异常通知中获取异常信息
说明:异常通知方法的形参变量名要和配置中的throwing="err"属性值一样
<4> 环绕通知可以获取以上所有
try {//前置增强//before();//手动调用目标方法//获取切入点方法的参数Object[] args = pjp.getArgs(); //参数//执行切入点方法,也就是执行目标方法value= pjp.proceed(args); //返回值就是目标方法的返回值,结果//后置增强//afterReturn();
} catch (Throwable throwable) { //异常throwable.printStackTrace();//异常增强//afterThrowable();
} finally {}
AOP切点表达式及通知类参数传递方式相关推荐
- 第15章-Spring AOP切点表达式(Pointcut)详解
文章目录 一.概述 二.切点表达式配置 1. 内置配置 2. 注解配置 3. 公共配置 二.切点表达式类型 **`execution`** **`within`** **`this`** **`tar ...
- aop注解配置切点 spring_使用注解匹配Spring Aop切点表达式
Spring中的类基本都会标注解,所以使用注解匹配切点可以满足绝大部分需求 主要使用@within()/@target @annotaton() @args()等... 匹配@Service类中的所有 ...
- Spring AOP切点表达式详解
1. 简介 面向对象编程,也称为OOP(即Object Oriented Programming)最大的优点在于能够将业务模块进行封装,从而达到功能复用的目的.通过面向对象编程,不同的模板可以相互组装 ...
- Spring Aop 切点表达式
在Spring AOP 中,通常需要借助AspectJ 的切点表达式语言来定义切点.重要的是Spring 中仅支持AspectJ切点指示器的一个子集. Spring 支持的AspectJ的切点指示器 ...
- Spring AOP 切点表达式args与@args区别
Spring AOP 中提供了丰富的切点表达式用于描述相对应的增强方法,其中@args是其中一种基于请求参数的增强逻辑. @args 表达式是用于限制目标方法参数的,与args类似.区别在于@args ...
- 使用注解匹配Spring Aop切点表达式
Spring中的类基本都会标注解,所以使用注解匹配切点可以满足绝大部分需求 主要使用@within()/@target @annotaton() @args()等... 匹配@Service类中的所有 ...
- spring aop切点表达式常见写法
- Spring AOP 切点(pointcut)表达式
概括 这遍文章将介绍Spring AOP切点表达式(下称表达式)语言,首先介绍两个面向切面编程中使用到的术语. 连接点(Joint Point):广义上来讲,方法.异常处理块.字段这些程序调用过程中可 ...
- Spring 中的切点表达式介绍
Spring 中的切点表达式介绍 翻译原文链接 Introduction to Pointcut Expressions in Spring 1. 概述 在本教程中,我们将讨论 Spring AOP ...
最新文章
- vue-router源码学习笔记
- python软件是免费的吗-python属于软件吗
- QT实现太阳系系统八大行星
- 心得 如何优雅地跨线程修改主线程窗口控件
- Win10+VS2017+Ceres-Solver-1.13.0配置
- AcWing 1750. 救生员(差分+暴力枚举)
- YGG Pilipinas: 台风奥黛特救灾工作更新
- 计算机程序是指为解决某一问题,在计算机中为解决某一特定问题二设计的指令程序是...
- PB 导出的Excel,打开会提示文件格式和扩展名不匹配问题
- C语言1加到100的递归方法,递归调用实现1到100的累加
- 佳沛金果水果的文案,水果佳沛金果文案高级感
- win10 格式化 linux u盘,Win10怎么格式化u盘 Win10中对U盘格式化的两种常用方法
- 【Day_09】走方格的方案数
- 一文读懂Apache Kylin
- qzezoj 1665 虫洞路线
- 人脸识别考勤系统安卓APP(手把手教学-手动滑稽)
- 什么是禅?《禅与计算机程序设计艺术》 / 陈光剑
- jqyery第四章上级训练一
- 各省地级市数字经济数据(2011-2019年)
- android 自定义输入法
热门文章
- Jozky 刷题目录
- CCPC Training Class
- CodeForces 1361E James and the Chase(dfs + 结论)
- P4774-[NOI2018]屠龙勇士【EXCRT】
- P2579,jzoj2288-[ZJOI2005]沼泽鳄鱼【矩阵乘法】
- 【期望】乘坐电梯(金牌导航 期望-2)
- 【动态规划】矩阵链相乘 (ssl 1596)/能量项链 (ssl 2006)
- 【树形DP】没有上司的晚会 (ssl 1607)
- P3157 动态逆序对 ,树状数组套动态开点线段树
- 16、java中的集合(3)