【Spring】AOP 面向切面编程 您所在的位置:网站首页 萦绕围绕环绕的区别 【Spring】AOP 面向切面编程

【Spring】AOP 面向切面编程

2023-10-27 07:31| 来源: 网络整理| 查看: 265

纠正: 环绕通知方法必须有返回值是错的,如果目标方法的返回值为空,则环绕通知的返回值就可以为void。还有,方法也不是必须要有ProceedingJoinPoint参数

总结: Aspectj表示切面执行时间,用的通知(Advice)。 这个通知可以使用注解表示。 5个注解表示切面的5个执行时间, 这些注解叫做通知注解。

@Before : 前置通知@AfterRetunring: 后置通知@Around: 环绕通知@AfterThrowing:异常通知@After:最终通知

环绕置通知方法的定义 1)方法是public 2)方法是必须有返回值, 推荐使用Object类型 3)方法名称自定义 4)方法必须有ProceedingJoinPoint参数

public Object myAround(ProceedingJoinPoint pjp){ } 使用aspectj框架的注解,实现环绕通知 在业务接口中添加一个方法:doFirst 在这里插入图片描述 并实现这个方法 在这里插入图片描述 在这里插入图片描述 @Around 环绕通知 注解语法 @Around(value="切入点表达式")

属性:value 切入点表达式

位置:在方法定义的上面

返回值:Object ,表示调用目标方法希望得到执行结果(不一定是目标方法自己的返回值)

参数: ProceedingJoinPoint, 相当于反射中 Method。 作用:执行目标方法的,等于Method.invoke()===方法执行

👇

@Around(value="execution(* *..SomeServiceImpl.doFirst(..))") public Object myAround(ProceedingJoinPoint pjp){ System.out.println("执行了环绕通知的myAround方法"); return "Hello Around,不是目标方法的执行结果"; }

调用doFirst测试: 在这里插入图片描述 调用doFirst却执行了myAround。 👇手动实现: 在这里插入图片描述 调用doFirst只是形式上的,真实调用的是myAround(). 👇 在这里插入图片描述 myAround做什么,doFirst就做什么,myAround的返回值👉res 在这里插入图片描述 使用环绕通知: 就是调用切面类中的通知方法(myAround)。

特点

1.在目标方法的前和后都能增强功能 2.控制目标方法是否执行 3.修改目标方法的执行结果。

1.想要正常执行doFirst(目标方法):

在这里插入图片描述 查看ProceedingJoinPoint源码: 在这里插入图片描述 ProceedingJoinPoint代表正在执行的目标方法=doFirst 调用proceed就可以调用目标方法。 在这里插入图片描述 在这里插入图片描述

通过环绕通知可以执行切面类代码也可以控制目标方法(doFirst)的执行。

返回值可以保持不变👇 在这里插入图片描述

2.在目标方法的前和后都能增强功能:

在这里插入图片描述

3.修改目标方法的执行结果

在这里插入图片描述

4.如果目标方法参数是“王六六”就执行目标方法,否则不执行

获取方法执行时的参数值:pjp.getArgs()

//获取方法执行时的参数值 String name = ""; Object[] args = pjp.getArgs(); if( args != null && args.length > 0){ Object arg = args[0]; if(arg !=null){ name=(String)arg; } }

在这里插入图片描述 测试: 在这里插入图片描述 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有