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切点表达式及通知类参数传递方式相关推荐

  1. 第15章-Spring AOP切点表达式(Pointcut)详解

    文章目录 一.概述 二.切点表达式配置 1. 内置配置 2. 注解配置 3. 公共配置 二.切点表达式类型 **`execution`** **`within`** **`this`** **`tar ...

  2. aop注解配置切点 spring_使用注解匹配Spring Aop切点表达式

    Spring中的类基本都会标注解,所以使用注解匹配切点可以满足绝大部分需求 主要使用@within()/@target @annotaton() @args()等... 匹配@Service类中的所有 ...

  3. Spring AOP切点表达式详解

    1. 简介 面向对象编程,也称为OOP(即Object Oriented Programming)最大的优点在于能够将业务模块进行封装,从而达到功能复用的目的.通过面向对象编程,不同的模板可以相互组装 ...

  4. Spring Aop 切点表达式

    在Spring AOP 中,通常需要借助AspectJ 的切点表达式语言来定义切点.重要的是Spring 中仅支持AspectJ切点指示器的一个子集. Spring 支持的AspectJ的切点指示器 ...

  5. Spring AOP 切点表达式args与@args区别

    Spring AOP 中提供了丰富的切点表达式用于描述相对应的增强方法,其中@args是其中一种基于请求参数的增强逻辑. @args 表达式是用于限制目标方法参数的,与args类似.区别在于@args ...

  6. 使用注解匹配Spring Aop切点表达式

    Spring中的类基本都会标注解,所以使用注解匹配切点可以满足绝大部分需求 主要使用@within()/@target @annotaton() @args()等... 匹配@Service类中的所有 ...

  7. spring aop切点表达式常见写法

  8. Spring AOP 切点(pointcut)表达式

    概括 这遍文章将介绍Spring AOP切点表达式(下称表达式)语言,首先介绍两个面向切面编程中使用到的术语. 连接点(Joint Point):广义上来讲,方法.异常处理块.字段这些程序调用过程中可 ...

  9. Spring 中的切点表达式介绍

    Spring 中的切点表达式介绍 翻译原文链接 Introduction to Pointcut Expressions in Spring 1. 概述 在本教程中,我们将讨论 Spring AOP ...

最新文章

  1. vue-router源码学习笔记
  2. python软件是免费的吗-python属于软件吗
  3. QT实现太阳系系统八大行星
  4. 心得 如何优雅地跨线程修改主线程窗口控件
  5. Win10+VS2017+Ceres-Solver-1.13.0配置
  6. AcWing 1750. 救生员(差分+暴力枚举)
  7. YGG Pilipinas: 台风奥黛特救灾工作更新
  8. 计算机程序是指为解决某一问题,在计算机中为解决某一特定问题二设计的指令程序是...
  9. PB 导出的Excel,打开会提示文件格式和扩展名不匹配问题
  10. C语言1加到100的递归方法,递归调用实现1到100的累加
  11. 佳沛金果水果的文案,水果佳沛金果文案高级感
  12. win10 格式化 linux u盘,Win10怎么格式化u盘 Win10中对U盘格式化的两种常用方法
  13. 【Day_09】走方格的方案数
  14. 一文读懂Apache Kylin
  15. qzezoj 1665 虫洞路线
  16. 人脸识别考勤系统安卓APP(手把手教学-手动滑稽)
  17. 什么是禅?《禅与计算机程序设计艺术》 / 陈光剑
  18. jqyery第四章上级训练一
  19. 各省地级市数字经济数据(2011-2019年)
  20. android 自定义输入法

热门文章

  1. Jozky 刷题目录
  2. CCPC Training Class
  3. CodeForces 1361E James and the Chase(dfs + 结论)
  4. P4774-[NOI2018]屠龙勇士【EXCRT】
  5. P2579,jzoj2288-[ZJOI2005]沼泽鳄鱼【矩阵乘法】
  6. 【期望】乘坐电梯(金牌导航 期望-2)
  7. 【动态规划】矩阵链相乘 (ssl 1596)/能量项链 (ssl 2006)
  8. 【树形DP】没有上司的晚会 (ssl 1607)
  9. P3157 动态逆序对 ,树状数组套动态开点线段树
  10. 16、java中的集合(3)