Springboot之AOP的执行顺序

AOP执行顺序验证

  项目引入了依赖。自动开启了aop的配置。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>

切面上配置@Order注解

  切面类AopTest1,order定义为2

@Component
@Aspect
@Order(2)
public class AopTest1 {@Pointcut("execution( * com.example.service.AopService.*(..))")public void pointCutMethod() {}@After("pointCutMethod()")public void myAfter(JoinPoint point) {System.out.println("我是AopTest1#myAfter");}@Before("pointCutMethod()")public void myBefore(JoinPoint point) {System.out.println("我是AopTest1#myBefore");}@Before("pointCutMethod()")public void myBefore2(JoinPoint point) {System.out.println("我是AopTest1#myBefore2");}@Around("pointCutMethod()")public Object around(ProceedingJoinPoint joinPoint) throws Throwable {System.out.println("我是AopTest1#around before");Object res = joinPoint.proceed();System.out.println("我是AopTest1#around after");return res;}@AfterThrowing(value = "pointCutMethod()", throwing = "e")public void afterThrowing(Exception e) {System.out.println("我是AopTest1#afterThrowing");}@AfterReturning(value = "pointCutMethod()")public void afterReturning() {System.out.println("我是AopTest1#afterReturning");}
}

  切面类AopTest2,order定义为1

@Component
@Aspect
@Order(1)
public class AopTest2 {@Pointcut("execution( * com.example.service.AopService.*(..))")public void pointCutMethod() {}@After("pointCutMethod()")public void myAfter(JoinPoint point) {System.out.println("我是AopTest2#myAfter");}@Before("pointCutMethod()")public void myBefore(JoinPoint point) {System.out.println("我是AopTest2#myBefore");}@Before("pointCutMethod()")public void myBefore2(JoinPoint point) {System.out.println("我是AopTest2#myBefore2");}@Around("pointCutMethod()")public Object around(ProceedingJoinPoint joinPoint) throws Throwable {System.out.println("我是AopTest2#around before");Object res = joinPoint.proceed();System.out.println("我是AopTest2#around after");return res;}@AfterThrowing(value = "pointCutMethod()", throwing = "e")public void afterThrowing(Exception e) {System.out.println("我是AopTest2#afterThrowing");}@AfterReturning(value = "pointCutMethod()")public void afterReturning() {System.out.println("我是AopTest2#afterReturning");}
}

  测试业务类AopService,里面会抛出异常1/0

@Service
public class AopService {public void testMethod(){System.out.println("我是AopService#testMethod");int b = 1/0;};
}

  启动类。获取AopService,调用testMethod方法。

@SpringBootApplication
public class SongDm2Application {public static void main(String[] args) {ConfigurableApplicationContext run = SpringApplication.run(SongDm2Application.class, args);AopService aopService = run.getBeanFactory().getBean(AopService.class);aopService.testMethod();}}

  执行结果如下。
在这里插入图片描述
  目标对象方法去掉抛出异常,执行结果如下
在这里插入图片描述
在这里插入图片描述
  总结。AOP的执行顺序如下:
  1.目标方法抛异常:Around before–>Before–>目标方法–>AfterThrowing–>After
  2.目标方法不抛异常:Around before–>Before–>目标方法–>AfterReturning–>After–>Around After
  3.同一个切面内的多个同一类型的拦截方法。按字符排序。
  4.多个切面拦截同一个方法,受@Order排序影响。目标方法执行之前,和执行之后的拦截顺序看上面的实验结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/130018.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构C/C++】顺序与链式二叉树创建与前中后、层序遍历

文章目录 顺序存储结构二叉树链式存储结构二叉树刷题推荐408考研各数据结构C/C代码&#xff08;Continually updating&#xff09; 顺序存储结构二叉树 顺序存储结构的二叉树的特点在于&#xff0c;其使用数组存放二叉树中的每一个节点。 我们设定根节点的数组索引下标为n&…

MM-Camera架构-ProcessCaptureRequest 流程分析

文章目录 processCaptureRequest\_3\_41.1 mDevice1.2 mDevice->ops->process\_capture\_request1.3 hardware to vendor mct\_shimlayer\_process\_event2.1 mct\_shimlayer\_handle\_parm2.2 mct\_shimlayer\_reg\_buffer processCaptureRequest_3_4 sdm660的摄像头走…

js Learn(异步JavaScript)

在这个模块中&#xff0c;我们来看看异步JavaScript&#xff0c;为什么它很重要&#xff0c;以及如何使用它来有效地处理潜在的阻塞操作&#xff0c;比如从服务器获取资源。 指南 异步JavaScript介绍 在本文中&#xff0c;我们将学习同步&#xff08;synchronous&#xff09…

非凸科技受邀出席源创会,探讨数据技术的未来发展

9月23日&#xff0c;由开源中国联合腾讯云TVP开展的“数据与前沿技术”源创会活动在成都顺利举行&#xff0c;非凸科技受邀出席&#xff0c;与业界专家们共同探讨了数据存储、数据分析、数据挖掘等前沿技术。 会上&#xff0c;非凸科技成都分公司研发总监赵海峰以“量化交易的数…

班级文化建设方案分享 中学高中建设方案

班级文化建设方案 一、基本信息 名称&#xff1a;xxxx计划 时间&#xff1a;XXXX年XX月-XXXX年XX月 地点&#xff1a;[XXXXX] 参与人群&#xff1a;X班全体师生及家长 目的和宗旨&#xff1a;通过班级文化建设&#xff0c;营造积极向上的班级氛围&#xff0c;增强班级凝聚…

嵌入式养成计划-31-网络编程----TCP的并发服务器模型------IO模型--IO多路复用

六十七、 TCP的并发服务器模型 67.1 循环服务器模型 一次只能处理一个客户端&#xff0c;当上一个客户端退出后&#xff0c;才能处理下一个客户端缺点&#xff1a;无法同时处理多个客户端 代码模型 sfd socket(); bind(); listen(); while(1){newfd accept();while(1){re…

web基础及http协议

web基础 全称 world wide web 全球广域网也就是万维网 web1.0 只能看 web2.0 页面交互&#xff1a;静态页面和动态页面 静态页面url&#xff1a;文本文件&#xff0c;可以修改&#xff0c;一般以html .htm保存的文本文件。网站的基础。静态页面和后台数据库没有任何交互不包含…

找到所有数组中消失的数字

题目链接 找到所有数组中消失的数字 题目描述 注意点 在不使用额外空间且时间复杂度为 O(n) 的情况下解决这个问题 解答思路 要想找到消失的数字需要使用哈希表&#xff0c;因为本题要在不使用额外空间且时间复杂度为 O(n) 的情况下解决这个问题&#xff0c;而所有数字出现…

安全性第一!OpenWRT配置SFTP远程文件传输,实现数据安全保护

文章目录 前言1. openssh-sftp-server 安装2. 安装cpolar工具3.配置SFTP远程访问4.固定远程连接地址 前言 本次教程我们将在OpenWRT上安装SFTP服务&#xff0c;并结合cpolar内网穿透&#xff0c;创建安全隧道映射22端口&#xff0c;实现在公网环境下远程OpenWRT SFTP&#xff…

如何使用Docker轻松构建和管理应用程序(一)

如今Docker的使用已经非常普遍&#xff0c;特别在一线互联网公司。使用Docker技术可以帮助企业快速水平扩展服务&#xff0c;从而到达弹性部署业务的能力。在云服务概念兴起之后&#xff0c;Docker的使用场景和范围进一步发展&#xff0c;如今在微服务架构越来越流行的情况下&a…

信息增益,经验熵和经验条件熵——决策树

目录 1.经验熵 2.经验条件熵 3.信息增益 4.增益比率 5.例子1 6.例子2 在决策树模型中&#xff0c;我们会考虑应该选择哪一个特征作为根节点最好&#xff0c;这里就用到了信息增益 通俗上讲&#xff0c;信息增益就是在做出判断时&#xff0c;该信息对你影响程度的大小。比…

数字孪生与GIS数据为何高度互补?二者融合后能达到什么样的效果?

山海鲸可视化作为一款数字孪生软件&#xff0c;在GIS的融合方面处于业内领先水平&#xff0c;那么为什么一款数字孪生软件要花费巨大的精力&#xff0c;去实现GIS的融合&#xff0c;实现后又能达到什么样的效果呢&#xff1f;下面就让我们来一探究竟。 一、为什么数字孪生需要…