多个AOP修饰同一个方法

news2024/11/16 13:47:27

1、背景

之前的文章中,有网友提出了一个问题,同一个方法用多个AOP修饰,执行顺序是怎样的?

好问题,之前没有关注过,这里写一个demo跑一下看看

同时有一个衍生问题,多个AOP修饰,会生成几个代理对象?

如果一个切面中捕捉到了异常并且吞掉了,其他切面还能捉到异常吗?

okk,我们带着问题进行出发

2、代码准备

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
被切的方法:
在这里插入图片描述

这里准备了3个注解和3个注解对应的切面,其中3个切面分别定义了不同的Order顺序

3、测试

1)执行属性是否按照Order中的顺序 ,还是按照注解在方法上的顺序
在这里插入图片描述
可以看到,是会按照Order的顺序,由小到大来执行的,有点嵌套的感觉

2)当没有Order或者Order的值一样时,执行顺序是怎样的?

我们把Order顺序都改为5,@Order(5)
在这里插入图片描述
发现也没有按照注解在方法的顺序执行,我们再加一个切面试试,这里我们加了一个logAOPV2
在这里插入图片描述
执行顺序:
在这里插入图片描述
似乎和java文件的顺序有关系,这里不太好验证,如果有顺序需要,可以在Order中显示定义
在这里插入图片描述
3) 生成了几个代理对象?

我们使用 System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, “D:\cglib”);
将动态代理生成的类输出到指定路径
在这里插入图片描述
在这里插入图片描述
发现生成了3个class文件,我们分别进去看一下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其实只有一个类是继承了AopService,也就是说真正的代理类只有一个

打个断点继续印证一下观点:
在这里插入图片描述
在这里插入图片描述
果然每个切面中的ProceedingJoinPoint引用的都是同一个代理对象

留一个问题:一个代理类,怎么实现多个AOP的功能呢?

4)嵌套最里边的切面捕捉到了异常,并吞掉,外层切面还能捕获异常吗?

不会了,需要做完处理后再抛出来才行

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux常用命令--进程和计划任务管理

一、程序和进程的关系 1、程序 ①保存在硬盘、光盘等介质中的可执行代码和数据 ②静态保存的代码 2、进程 ①在cpu及内存中运行及进程代码 ②动态执行的代码 ③父(fork)、子进程,每个程序可以创建一个或多个进程 父进程和子进程的区别&am…

springboot如何获取websocket的header头信息

websocket协议与http协议类似,也有属于自己的头信息,如下图所示,为postman在连接时自定义的header: 那么在后端中,如何像http的HttpServletRequest一样来获取这个头信息的内容呢? 自定义一个WebSocket配置类&#xff…

【LeetCode】剑指 Offer 19. 正则表达式匹配 p124 -- Java Version

题目链接:https://leetcode.cn/problems/zheng-ze-biao-da-shi-pi-pei-lcof/ 1. 题目介绍(19. 正则表达式匹配) 请实现一个函数用来匹配包含. 和*的正则表达式。模式中的字符.表示任意一个字符,而’*表示它前面的字符可以出现任意…

图解LeetCode——剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

一、题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。 二、示例 2.1> 示例: 【输入】nums [1,2,3,4] 【输出】[1,3,2,4] 【注】[3,1,2,4] 也是正确的…

基于vscode创建SpringBoot项目,连接postgresql数据库

1、Vue下载安装步骤的详细教程(亲测有效) 1_水w的博客-CSDN博客 2、Vue下载安装步骤的详细教程(亲测有效) 2 安装与创建默认项目_水w的博客-CSDN博客 3、基于vscode开发vue项目的详细步骤教程_水w的博客-CSDN博客 4、基于vscode开发vue项目的详细步骤教程 2 第三方图标库FontAw…

最新的Windows docker安装方法

什么是Docker?关于Docker的相关概述,请看:Docker_面向架构编程的博客-CSDN博客在Windows10 or Windows11中安装docker主要就两步:1.安装wsl22. 安装docker一、安装WSL2安装wslwsl --install然后重启一下电脑在cmd窗口可以查看自己…

如何使用CVE-Tracker随时获取最新发布的CVE漏洞信息

关于CVE-Tracker CVE- Tracker是一款功能强大的CVE漏洞信息收集和更新工具,该工具基于自动化ps脚本实现其功能,可以帮助广大研究人员轻松获取到最新发布的CVE漏洞信息。 CVE-Tracker采用PowerShell开发,可以在操作系统启动的时候自动运行Mi…

计算机组成原理4小时速成5:系统总线,总线分类,数据总线,地址总线,控制总线,总线传输率

计算机组成原理4小时速成5:系统总线,总线分类,数据总线,地址总线,控制总线,总线传输率 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学…

华为6面,测试岗报价11k,HR说我不尊重华为,他们没有那么低薪资岗位?

在不知道一个公司的普遍薪资水平的时候,很多面试者不敢盲目的开价,但就因为这样可能使得面试官怀疑你的能力。一位网友就在网上诉说了自己的经历,男子是一位测试员,已经有九年的工作经历了,能力自己觉得还不错。 因为…

matlab-初学

初次学习了解matlab的相关知识,跟着b站博主学习的,仅此记录学习过程的笔记与感悟。命令行小常识1.命令行给变量赋值,回车即运行一行。2.逗号反馈这一行所有的变量结果;分号则不反馈,单实际变量值已经改变(只是不在下方…

22- estimater使用 (TensorFlow系列) (深度学习)

知识要点 estimater 有点没理解透 数据集是泰坦尼克号人员幸存数据. 读取数据:train_df pd.read_csv(./data/titanic/train.csv) 显示数据特征:train_df.info() 显示开头部分数据:train_df.head() 提取目标特征:y_train tr…

Web前端:四大Web应用开发趋势和技术

就像其他行业一样,web应用程序开发每年都会经历巨大的变化。就像人们说的,变化是技术中唯一不变的东西。因此,我们这里有一些你可以期待的市场变化。Web应用开发趋势和技术1.市场对聊天机器人和人工智能寄予厚望已经说过很多次,也…

java 面试

面试目录概述需求:设计思路实现思路分析1.面试概要参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive. happy f…

JSTL核心库的简单使用

JSTL核心库的简单使用 7.1考试重点 7.1.1c:out输出数据 考试重点就是c的相关的 jar包下载地址:Apache Tomcat - Apache Taglibs Downloads 看会典型应用就可以<% page contentType"text/html;charsetUTF-8" language"java" %> <% taglib uri"…

DolphinDB 通过 Telegraf + Grafana 实现设备指标的采集监控和展示

基于原始数据采集的可视化监控是企业确保设备正常运行和安全生产的重要措施。本文详细介绍了如何从DolphinDB 出发&#xff0c;借助 Telegraf 对设备进行原始数据采集&#xff0c;并通过 Grafana 实现数据的可视化&#xff0c;从而实现设备指标的实时监控。1. 概览Telegraf 是 …

Mybatis-plus逻辑删除更新字段

MybatisPlus版本 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version> </dependency> <dependency><groupId>com.baomidou</groupId&g…

优思学院|DFMEA是全球制造业的必修课!

DFMEA&#xff08;Design Failure Mode and Effects Analysis&#xff09;是一种分析技术&#xff0c;在产品设计的早期阶段识别和解决潜在的失效问题。它通过分析设计的各个方面&#xff0c;识别潜在的失效模式和影响&#xff0c;并提出相应的改进措施&#xff0c;以减少失效的…

服装企业 采购系统

技术&#xff1a;Java、JSP等摘要&#xff1a;随着我国市场经济的不断发展,企业之间的竞争越来越激烈,只有对企业库存物资资源全面掌握,充分发挥闲置资源的利用,对资源进行优化配置,才能使企业效益达到最大化。只有通过规范科学的物资管理手段,才能节省物资采购成本,提高工作效…

Java——面向对象

目录 前言 一、什么是面向对象&#xff1f; 面向过程 & 面向对象 面向对象 二、回顾方法的定义和调用 方法的定义 方法的调用 三、类与对象的创建 类和对象的关系 创建与初始化对象 四、构造器详解 五、创建对象内存分析 六、封装详解 七、什么是继承&#x…

Unity TextMeshPro

Unity TextMeshPro 简介 TextMeshPro(也简称为TMP)号称是Unity的终极文本解决方案&#xff0c;它是Unity 的 UI 文本和旧版文本网格体的完美替代品。 功能强大且易于使用&#xff0c;使用高级文本渲染技术以及一组自定义着色器;提供实质性的视觉质量改进&#xff0c;同时在文…