获取方法的入参和返回值

使用 Spring AOP 获取方法的入参和返回值

Spring AOP(面向切面编程)可以用于拦截方法调用,从而获取方法的入参和返回值。以下是详细步骤和示例代码。

1. 定义切面类

创建一个类并使用 @Aspect 注解标注它,定义拦截方法调用的切面。在切面类中,通过 JoinPoint 获取方法的入参,通过 @AfterReturning 获取方法的返回值。

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import java.util.Arrays;

@Aspect
@Component
public class LoggingAspect {

    @Before("execution(* com.example.service.*.*(..))")
    public void logMethodEntry(JoinPoint joinPoint) {
        // 获取方法名
        String methodName = joinPoint.getSignature().getName();
        
        // 获取方法参数
        Object[] args = joinPoint.getArgs();
        
        // 获取方法签名
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        
        // 获取方法返回值类型
        Class<?> returnType = methodSignature.getReturnType();
        
        System.out.println("Method " + methodName + " called with args: " + Arrays.toString(args));
        System.out.println("Return type: " + returnType.getName());
    }

    @AfterReturning(pointcut = "execution(* com.example.service.*.*(..))", returning = "result")
    public void logMethodExit(JoinPoint joinPoint, Object result) {
        // 获取方法名
        String methodName = joinPoint.getSignature().getName();
        
        // 获取方法签名
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        
        // 获取方法返回值类型
        Class<?> returnType = methodSignature.getReturnType();
        
        System.out.println("Method " + methodName + " returned: " + result);
        System.out.println("Return type: " + returnType.getName());
    }
}

代码解释

  • @Aspect:标记这是一个切面类。
  • @Component:将切面类声明为 Spring 组件。
  • @Before:在目标方法执行之前执行,可以用来获取方法的入参。
    • joinPoint.getArgs():获取方法的参数。
    • joinPoint.getSignature().getName():获取方法名。
    • MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature():获取方法签名。
    • methodSignature.getReturnType():获取方法的返回值类型。
  • @AfterReturning:在目标方法成功返回后执行,可以用来获取方法的返回值。
    • result 参数表示目标方法的返回值。

通过以上切面类,你可以在方法调用前获取方法的入参,在方法调用后获取方法的返回值及其类型。这样,你就可以在 Spring 应用中有效地记录和处理方法的入参和返回值。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

期末成绩老师怎么发?

期末考试的钟声终于敲响&#xff0c;学生们紧张而期待地等待着成绩的揭晓。而作为老师&#xff0c;我们面临的不仅仅是成绩的评判&#xff0c;还有一项看似简单却极其繁琐的任务——将成绩单一一私信给每位学生的家长。在成绩公布的那一刻&#xff0c;我们不仅要确保每一份成绩…

Java编程:解决实际问题的高效方法

&#x1f380;&#x1f380;引言 &#x1f44d;&#x1f44d;点关注编程梦想家&#xff08;大学生版&#xff09;-CSDN博客 不迷路❤❤ Java是一种广泛使用的编程语言&#xff0c;它不仅适用于企业级应用开发&#xff0c;还能高效解决各种实际问题。从数学问题到工程问题&…

WEB自动化框架封装MySQL连接及sql断言教程

为了在Web自动化测试中连接MySQL数据库并进行SQL断言&#xff0c;您可以按照以下步骤&#xff1a; 安装MySQL Connector/Python驱动程序&#xff0c;并导入它。 使用Connector/Python创建一个连接对象&#xff0c;指定所需的主机名、用户名、密码和数据库名。 创建一个游标对…

论文研读|AI生成图像检测发展历程及研究现状

前言&#xff1a;本篇博客系统性梳理AI生成图像检测的研究工作。 「人工智能生成图像检测」研究及发展现状介绍 参考资料 https://fdmas.github.io/AIGCDetect/针对AIGC检测的鲁棒性测试——常见攻击手段汇总论文研读&#xff5c;以真实图像为参考依据的AIGC检测论文研读&…

【TB作品】51单片机 Proteus仿真 基于单片机的LCD12864万年历及温度监测系统设计

实验报告&#xff1a;基于单片机的LCD12864万年历及温度监测系统设计 背景介绍 本实验旨在设计并实现一个基于STC89C52单片机的LCD12864显示的万年历系统&#xff0c;同时集成温度传感器以实现温度监测功能。系统具备整点报时和闹钟功能&#xff0c;通过蜂鸣器进行提示。该设…

【2024_CUMCM】时间序列算法ARMA

目录 2023-c-问题二 问题分析 介绍 单位根检验 白噪声检验 自相关和偏自相关图 利用信息准则定阶 构建AMIMA模型 D-W检验 预测 代码 2023-c-问题二 问题分析 ARMA适合多个领域的时间序列分析&#xff0c;不同时间的定价策略属于这类问题。 介绍 ARMA模型&…

PingCAP 成为全球数据库管理系统市场增速最快的厂商

近日&#xff0c;Gartner 发布的《Market Share Analysis: Database Management Systems, Worldwide, 2023》&#xff08;2024 年 6 月&#xff09;报告显示&#xff1a;“2023 年全球数据库管理系统&#xff08;DBMS&#xff09;市场的增长率为 13.4%&#xff0c;略低于去年的…

我国网络安全领域有哪些法律法规?主要内容是什么?

1. 背景介绍 网络信息安全方面的法规在全球范围内都有相应的立法&#xff0c;我们主要的立法有《网络安全法》、《密码法》、《数据安全法》以及《个人信息保护法》。当前也有一些相关的条例和管理办法&#xff0c;接下来就为大家一一介绍。 2. 法规介绍 在中国&#xff0c;…

博客搭建-图床篇

我们的博客难免少不了图片&#xff0c;图片管理是一个不小的难题。如果我们将图片全部放到我们自己的服务器上&#xff0c;那么带宽就基本上会被图片所占满了&#xff0c;这会导致网站加载很慢&#xff08;特别是图片加载很慢&#xff09;。 ‍ 什么是图床 为了解决图片的问…

Python28-7.5 降维算法之t-分布邻域嵌入t-SNE

t-分布邻域嵌入&#xff08;t-distributed Stochastic Neighbor Embedding&#xff0c;t-SNE&#xff09;是一种用于数据降维和可视化的机器学习算法&#xff0c;尤其适用于高维数据的降维。t-SNE通过将高维数据嵌入到低维空间&#xff08;通常是二维或三维&#xff09;中&…

大数据之路 读书笔记 Day4 数据同步

回顾&#xff1a; Day 3 总结了无限客户端的日志采集 大数据之路 读书笔记 Day 3Day 2总结了浏览器端的日志采集 大数据之路 读书笔记 Day 2 数据同步 阿里数据体系中的数据同步&#xff0c;主要指的是在不同的数据存储系统之间进行数据的传输与更新&#xff0c;以保证数据的一…

人工智能系列-Python面向对象编程

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 面向对象编程和面向过程编程 在使用计算机语言进行代码编写时&#xff0c;常见的两种思路是面向对象编程和面向过程编程。 面向过程&#xff1a;根据业务逻辑从上到下写代码。…

GDP播放器 驱动视频播放器 PHP 系统源码 v4.4.3

最重要的是我们自己开发了源代码&#xff0c;因此无论您在使用此工具时遇到什么问题&#xff0c;我们都会快速解决。这个版本演示 分别支持PHP7.4/8.1/8.2三个版本 演示地址

大华DSS user_toLoginPage.action命令执行漏洞

免责声明 本文章仅做网络安全技术研究使用&#xff01;严禁用于非法犯罪行为&#xff0c;请严格遵守国家法律法规&#xff1b;请勿利用文章内的相关技术从事非法测试&#xff0c;如因此产生的一切不良后果与文章作者无关。使用本文所提供的信息或工具即视为同意本免责声明&…

华为云简介

前言 华为云是华为的云服务品牌&#xff0c;将华为30多年在ICT领域的技术积累和产品解决方案开放给客户&#xff0c;致力于提供稳定可靠、安全可信、可持续创新的云服务&#xff0c;赋能应用、使能数据、做智能世界的“黑土地”&#xff0c;推进实现“用得起、用得好、用得放心…

µCOS-III 任务同步机制-任务信号量

1. 什么是任务信号量 任务信号量是一种用于任务间同步和通信的计数器&#xff0c;通常用于解决任务间的竞争条件和资源共享问题。在C/OS-III中&#xff0c;任务信号量提供了二进制信号量和计数信号量两种类型&#xff1a; 二进制信号量&#xff1a;只能取值0或1&#xff0c;适…

昇思12天

FCN图像语义分割 1. 主题和背景 FCN是由UC Berkeley的Jonathan Long等人于2015年提出的&#xff0c;用于实现图像的像素级预测。 2. 语义分割的定义和重要性 语义分割是图像处理和机器视觉中的关键技术&#xff0c;旨在对图像中的每个像素进行分类。它在很多领域有重要应用…

ImportError: DLL load failed while importing _imaging: 操作系统无法运行 %1

解决方案&#xff1a; &#xff08;1&#xff09;搜索打开Anaconda Prompt控制台&#xff0c;进入到自己要安装的环境下面去&#xff0c;卸载Pillow:pip uninstall Pillow 没有安装Pillow的就不用卸载&#xff0c;直接安装&#xff0c; &#xff08;2&#xff09;然后再安装&a…

[优化算法]梯度下降法-凸函数的收敛性

文章目录 1. 三个条件2. 二次上界引理3. 证明 1. 三个条件 f f f 有下界&#xff0c;可微&#xff0c;凸函数 ∇ f \nabla f ∇f是 Lipschitz连续步长 α ∈ ( 0 , 1 L ] \alpha \in (0,\frac{1}{L}] α∈(0,L1​] 则 { f ( x k ) } \{ f(x_k) \} {f(xk​)} 以 O ( 1 k ) \m…