AOP获取方法返回值

我们用Spring的AOP切面做日志收集或者记录的时候,在springboot中用@Aspect注解。比如:


@Aspect
public class AdviceTest {@Before("execution(* com.abc.service.*.many*(..))")public void permissionCheck(JoinPoint point) {System.out.println("@Before:模拟权限检查...");System.out.println("@Before:目标方法为:" + point.getSignature().getDeclaringTypeName() + "." + point.getSignature().getName());System.out.println("@Before:参数为:" + Arrays.toString(point.getArgs()));System.out.println("@Before:被织入的目标对象为:" + point.getTarget());}@After("execution(* com.abc.service.*.many*(..))")public void releaseResource(JoinPoint point) {System.out.println("@After:模拟释放资源...");System.out.println("@After:目标方法为:" + point.getSignature().getDeclaringTypeName() + "." + point.getSignature().getName());System.out.println("@After:参数为:" + Arrays.toString(point.getArgs()));System.out.println("@After:被织入的目标对象为:" + point.getTarget());}
12345678910111213141516171819202122

@Before表示方法请求前执行,@After表示方法请求后执行,一般做记录的时候会使用@After比较多。但是有时候我们需要获取方法的返回值做判断该如何处理呢?首先,我们看@After的注解源码。

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface After {String value();String argNames() default "";
}
1234567

可以看到@After注解并不能获取到方法的返回值。这个时候我们需要的是@AfterReturning。

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface AfterReturning {String value() default "";String pointcut() default "";String returning() default "";String argNames() default "";
}
1234567891011

returning表示的就是返回值。应用如下:

    @AfterReturning(value = "execution(* com.test.business.controller.TestController.audit*(..))",returning = "methodResult")public void afterReturning(JoinPoint joinPoint, Object methodResult) {MethodSignature ms = (MethodSignature) joinPoint.getSignature();Method method = ms.getMethod();System.out.println("请求方法为:" + method.getName());System.out.println("请求返回内容为:" + methodResult.toString());}
123456789

这样就可以获取返回值,然后根据返回值做罗辑处理了。

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

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

相关文章

多交朋友多条路

最近在找工作,然后有个朋友帮我推荐一个公司,很感激他,这个朋友是之前指导过他写简历认识的,然后人家也有给我讲过一些知识,最近帮我推一个公司,不免觉得,其实多交点志同道合的朋友,…

指增的超额来自于哪里,2024的乾坤九法,美股的宏观估值双杀

图片截止到:2024/1/4 上证 周四 -0.43% 市场热点分析 1. 2024元旦后国内外市场都出现了不同程度的下跌。技术面国内市场一直走在72日均线之下,而且没有形成底部,熊市还会延续。宏观方面,12月官方PMI持续向下,小企业更多…

初入职场工作应该怎么干?

上一篇文章说过了,踏入职场和同事和领导关系怎么处,接下来我说说工作怎么干。 初入职场可能对环境,人,事,工作都一脸懵逼,深怕工作干不好之类的,所以我要给你吃定心丸,让你可以驰骋…

DBA技术栈(二):MySQL 存储引擎

2.1 MySQL存储引擎概述 上个业余的图: MyISAM 存储引擎是 MySQL 默认的存储引擎,也是目前 MySQL 使用最为广泛的存储引擎之一。他的前身就是我们在 MySQL 发展历程中所提到的 ISAM,是 ISAM 的升级版本。在 MySQL最开始发行的时候是 ISAM 存…

CentOS上设置中文/英文语言环境

一、在CentOS上设置中文语言环境 1、安装中文字体支持: sudo yum install -y wqy-microhei-fonts2、设置系统默认语言为中文: sudo localectl set-locale LANGzh_CN.UTF-83、重新启动系统,以便应用语言更改: sudo reboot二、在…

解锁无限可能:深入探索Docker的奇妙世界

解锁无限可能:深入探索Docker的奇妙世界 1、Docker的简介: Docker是一个开源的容器化平台,它以轻量级和可移植的方式打包应用程序及其所有依赖项,并提供了一种标准化的部署方式。通过使用Docker,开发人员可以将应用程…

编程语言的发展趋势是什么样的?

随着计算机技术的不断发展,计算机编程语言也在不断更新和发展。 未来编程语言的发展特点趋势是更安全、人性化(可读性、可写性)、跨平台这三个方向进行发展。更加简单易学更加多样性,有更加专业面向某一领域的语言,也…

Lumeical Script------Script Prompt 中的两种输出方式

Lumeical Script------Script Prompt 中的两种输出方式 引言正文方法1方法2 引言 有时候,和众多编程语言一样,我们需要在 Script Prompt 中打印一些我们已经得到的数据,这样可以方便我们调试代码和查看代码中是否有错误。关于在 Script Prom…

ArrayList学生管理系统

文章目录 1.ArrayList集合和数组的优势对比:1.1 ArrayList类概述1.2 ArrayList类常用方法1.2.1 构造方法1.2.2 成员方法1.2.3 示例代码 1.3 ArrayList存储字符串并遍历1.3.1 案例需求1.3.2 代码实现 1.4 ArrayList存储学生对象并遍历1.4.1 案例需求1.4.2 代码实现 1…

集合的三种遍历方式

迭代器(Iterator) 概述:Iterator 是个接口,迭代器是集合的专用遍历方式 使用方法,我们想要使用迭代器,必须首先得到集合对象,通过集合对象生成迭代器对象,才能进行集合的遍历 常用…

系统运维-Apache服务的基础安装与使用

Apache:WEB服务器的软件 Apache HTTP是一个模块化的服务器,源于NCSAhttpd服务器,经过多次修改,成为世界使用排名第一的WEB服务器软件。 目录 HTTP HTTPS HTTP 首先安装apache yum install httpd* -y #install http 要有网站首…

苹果电脑菜单栏应用管理软件Bartender 4 mac软件特点

Bartender mac是一款可以帮助用户更好地管理和组织菜单栏图标的 macOS 软件。它允许用户隐藏和重新排列菜单栏图标,从而减少混乱和杂乱。 Bartender mac软件特点 菜单栏图标隐藏:Bartender 允许用户隐藏菜单栏图标,只在需要时显示。这样可以…

全网独家:基于openeuler-20.03-lts底包构建opengauss数据库V5.0.1LTS的单机容器

近期想测试一下opengauss数据库,官网上单机容器部署只有x86-64平台CentOS 7.6和ARM64平台 openEuler20.03 LTS两种底包方案。本文系全网独家在x86平台上基于openeuler-20.03-lts底包构建opengauss数据库V5.0.1LTS的单机容器。 opengauss官网上单机容器部署只有x86-64平台Cent…

利用ChatGPT在不同教学场景中的应用

教学策略与最佳实践: 课堂讨论:在课堂上可以利用ChatGPT作为一个辅助工具,回答学生的问题、提供解释和补充知识。教师可以利用ChatGPT快速获取相关信息,并且根据学生的提问进行回答和引导讨论。 个别辅导:对于个别辅导…

Golang leetcode160相交链表 map 双指针迭代

文章目录 相交链表 leetcode160暴力求解 map双指针1双指针2 巧妙 该部分源于leetcode官方题解 相交链表 leetcode160 由于链表深度不一致,所以不太好使用递归 检测方法 : 相交链表,即两个链表上一个节点的Next指向 同一个地址先检测同样Val…

在页面中获取iframe中window对象,在iframe中获取上级window对象

1 在页面中获取iframe中window对象 const iframedocument.getElementById("myiframe") iframe.contentWindow 获取iframe中的window对象 iframe.contentDocument 获取iframe中的document对象2 在iframe中获取上级window对象 window.parent 获取上一级的windo…

<设计模式修炼>模板方法模式的使用场景和注意事项学习

介绍 模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 2) 简单说&#xff…

Proxy 与 defineProperty 的理解、区别、优势、劣势

一、Object.defineProperty() 文档:Object.defineProperty() - JavaScript | MDN 作用:对一个对象进行操作的方法。可以为一个对象增加一个属性,同时也可以对一个属性进行修改和删除。 它是在 ES5 中引入的,使用了 getter 和 s…

P10 RV1126推流项目——ffmpeg输出参数初始化

前言 从本章开始我们将要学习嵌入式音视频的学习了 ,使用的瑞芯微的开发板 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ 🔥 推荐专栏2: 《Linux C应用编程(概念类)_C…