AOP获取方法返回值

2023-11-05

我们用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());
    }

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

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

    String argNames() default "";
}

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

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

    String pointcut() default "";

    String returning() default "";

    String argNames() default "";
}

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());
    }

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AOP获取方法返回值 的相关文章

  • Vue 解决跨域问题

    Vue 解决跨域问题 通常在不同服务器访问过程中可能会遇到跨域问题 也就是口头上常说的策略同源问题 CORS 出现跨越一般就是判断三个地方 http协议 请求地址 端口号 三者若有一处不相同 那么就会出现跨域 解决这个问题就要配置一个代理服
  • 实现不同局域网文件共享的解决方案:使用Python自带HTTP服务和端口映射

    文章目录 1 前言 2 本地文件服务器搭建 2 1 python的安装和设置 2 2 cpolar的安装和注册 3 本地文件服务器的发布 3 1 Cpolar云端设置 3 2 Cpolar本地设置 4 公网访问测试 5 结语 1 前言 数据
  • LLM系列

    简介 月黑见渔灯 孤光一点萤 微微风簇浪 散作满河星 小伙伴们好 我是微信公众号 小窗幽记机器学习 的小编 卖钢丝球的小男孩 今天这篇小作文主要介绍Vicuna模型 基于官方模型13B模型部署服务及对话实测 更多 更新文章欢迎关注微信公众号
  • 【R语言】——UpSetR包绘制集合图(保姆级教程)

    本期介绍利用UpsetR包大于5个样本的 维恩图 即集合图 上期 R语言 VennDiagram包绘制维恩图 Venn diagram 保姆级教程 介绍2 5个样本绘制维恩图的方法 但当样本超过5个时 常规维恩图可视化结果的直观性及数据的捕
  • JAVA_求数组的和

    public class ChangeArgs public static void main String args 求数组的和 int arr 1 3 4 6 7 8 9 10 Counto001 y new Counto001 int
  • centos7 离线安装gcc g++(已帮你备好所有rpm文件)

    rpm文件下载链接 链接 https pan baidu com s 1ehb7GiQdGwDHcMNRgBbaRw 提取码 pys4 下载完成后 将所有rpm文件放入机器中的任意目录下 进入目录 执行 rpm Uvh rpm nodeps
  • 【硬件架构的艺术】学习笔记(2)同步和复位

    目录 写在前面 2 同步和复位 2 1 同步设计 2 1 1 避免使用行波计数器 2 1 2 门控时钟 2 1 3 双边沿或混合边沿时钟 2 1 4 用触发器驱动另一个触发器的异步复位端 2 2 推荐的设计技术 2 2 1 避免在设计中出现
  • lstm原文_上海交通大学张宇帆,艾芊等:如何理解深度LSTM网络并实现超短期负荷准确预测?...

    戳题目 看全文 基于深度长短时记忆网络的区域级超短期负荷预测方法 张宇帆 艾芊 林琳 袁帅 李昭昱 电网技术 2019年第6期 1884 1891 微文内容 一 研究背景 超短期负荷预测一般指当前时刻往后一个小时内的负荷预测 主要用于日内及
  • Tip: built files are meant to be served over an HTTP server. Opening index.html over file:// won't

    vue cli项目打包报错 Tip built files are meant to be served over an HTTP server Opening index html over file won t work 报错原因 因为
  • cmake自动选择编译器脚本

    一 什么是cmake CMake 是一个跨平台的 开源的构建系统 BuildSystem CMake 可以通过 CMakeLists txt 文件来产生特定平台的标准的构建文件 例如 为 Unix 平台生成makefiles文件 使用GCC
  • Mac安装鸿蒙系统,搭建MAC系统下的Wi-Fi loT Hi3861鸿蒙开发环境

    前言 周二就收到了Wi Fi loT Hi3861的试用开发板 最近忙的一直没有时间开始研究 终于今天周六睡了一个大懒觉起来开始准备开发环境 因为harmonyos目前只能使用ubuntu进行编译 刷写固件需要windows环境 而我习惯在
  • C++选择题

    选择题 1 说明函数int method a floct 是友元函数应为 A A friend int method a a floctz B friend int method a floctz C int friend a floctz
  • 初识ES-安装kibana

    部署kibana kibana可以给我们提供一个elasticsearch的可视化界面 便于我们学习 部署 运行docker命令 部署kibana docker run d name kibana e ELASTICSEARCH HOSTS
  • PHP完整源码编译安装

    liunx安装步骤 第一步 去官网下载php源码包 pph官网地址 下载好之后上传到liunx 这里我的用的windows vm虚拟机 推荐一个好用的命令将本地文件上传到服务器 yum install lrzsz 先安装依赖 root lo
  • 虚拟机中,安装tensorflow时killed解决办法

    我在图形界面的虚拟Linux里的pycharm里 用pip命令安装clu时 要先安装tensorflow 第一次tensorflow下载成功了 存在了cache文件夹里 但其他包发生了冲突 连接失败 当解决完冲突 在此用pip安装时 到了收
  • 【webpack】配置React环境

    配置React打包环境 开始搭建 安装webpack 基础配置 开发环境 使用Typescript 使用React 代码规范 Prettier Eslint 总结 一个现代化的web应用 已经不是单纯地优html css javascrip
  • 查看linux 所有运行的应用和端口命令

    要查看 Linux 中所有运行的应用程序及其对应的端口 可以使用以下命令 1 使用 netstat 命令 已被弃用 建议使用 ss 命令 netstat tuln 这会显示当前系统上所有打开的网络连接和监听的端口 其中 t 表示显示 TCP
  • 自动标注软件AnyLabeling安装及使用教程

    自动标注软件AnyLabeling AnyLabeling自动标注软件介绍 AnyLabeling标注软件安装 anylabeling标注软件使用 AnyLabeling自动标注软件介绍 该工具作为一个具有Segment Anything和
  • JavaScript高级

    文章目录 今日内容 一 DOM简单学习 为了满足案例要求 1 功能 二 事件简单学习 三 BOM 1 概念 Browser Object Model 浏览器对象模型 2 组成 3 Window 窗口对象 案例2 轮播图 4 Location
  • c# - A study on the NativeWindow - encapsulate window handle and procedure

    NativeWindow gives you a way to way to intercept the window messages are you familiar with the Windows Message Pump Aslo

随机推荐

  • 【yolov7系列三】实战从0构建训练自己的数据集

    大家好 我是张大刀 上文中提到了yolov7的正负样本匹配策略 这里主要从0开始训练自己的数据集 如果大家需文中ppt使用 请关注公众号后台添加微信 领取 备注 ppt 首先大刀是在windows电脑端完成数据集的标注 linux ubun
  • 在 FPGA 上如何实现双线性插值的计算?

    作者 殷庆瑜 责编 胡巍巍 目录 一 概述 二 What 什么是双线性插值 二 Why 为什么需要双线性插值 三 How 怎么实现双线性插值 关键点1 像素点选择 关键点2 权重计算 升级1 通过查表减少计算量 升级2 通过数据锁存减少取数
  • cnpm下载、cnpm不存在处理、yarn安装

    1 cnpm全局安装 npm install g cnpm registry https registry npm taobao org 2 运行cnpm v 报错 不是内部环境 3 解决办法 在环境变量里添加路径 cmd中输入以下命令获取
  • 万用表怎么测量电池容量_家电维修必知:万用表测量及使用方法

    万用表怎么用 这是很多新手或是业余爱好者的一个小难题 有了万用表却不会使用 万用表是电工电器行业不可缺少的测量仪表 一般以测量电压 电流和电阻为主要目的 万用表按显示方式分为指针万用表和数字万用表 是一种多功能 多量程的测量仪表 也称三用表
  • c语言打开大于2G的文件,C语言操作大于2G的文件

    最近在做视频编解码时遇到使用fseek无法定位到一个大于2G的文件尾 由于自己功底不扎实 百思不得其解 请教大神后得知在VC平台下使用 fseeki64可以解决问题 然而自己傻乎乎的在获取文件指针位置的地方依旧使用的ftell 中途调试N久
  • (Java)leetcode-42 Trapping Rain Water(接雨水)

    题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图 计算按此排列的柱子 下雨之后能接多少雨水 上面是由数组 0 1 0 2 1 0 1 3 2 1 2 1 表示的高度图 在这种情况下 可以接 6 个单位的雨水 蓝色部分表示雨水
  • Servlet重要的API

    重要的API 重要的API config response响应 响应头的相关操作 响应输出流的操作 其它操作 request请求 请求头数据 Request乱码问题的解决方法 Java反射基础 重要的API config init 和ini
  • 【软件测试简答题】

    软件测试简答题 1 根据G Mayers的观点 软件测试的目的是什么 软件测试是 1 为了发现错误而执行程序的过程 2 一个好的用例能够发现至今尚未发现的错误的测试 3 一个成功的测试是发现至今尚未发现的错误的测试 2 简述软件测试的任务
  • java试题 算法训练 大小写转换

    试题 算法训练 大小写转换 资源限制 时间限制 1 0s 内存限制 256 0MB 问题描述 输入一个字符串 将大写字符变成小写 小写变成大写 然后输出 输入格式 acbAB 输出格式 ACBab 样例输入 一个满足题目要求的输入范例 例
  • 浅析Python爬虫ip程序延迟和吞吐量影响因素

    作为一名资深的爬虫程序员 今天我们很有必要来聊聊Python爬虫ip程序的延迟和吞吐量 这是影响我们爬取效率的重要因素 这里我们会提供一些实用的解决方案 让你的爬虫程序飞起来 网络延迟 首先 让我们来看看网络延迟对爬虫ip程序性能的影响 网
  • 【2022】小米秋招前端笔试(卷1+卷2单选题)

    文章目录 小米秋招前端笔试卷1 1 Git 暂存操作的API是什么 2 的valueOf和toString的结果是什么 3 排序算法中哪一种算法的时间复杂度是O nlogn 4 通常情况下 一个URL的格式是 5 以下哪个项目不是可以在HT
  • 【Educoder作业】问题求解——for 循环

    E d u c o d e r Educoder Educoder作
  • VUE全局过滤器

    对于反复使用或多个组件使用的过滤器相同时应该考虑全局过滤器 1 最基本的使用方法 在main js中注册 Vue filter MyFilter function value 返回处理后的值 return value 在组件直接使用即可 2
  • THINKPHP5.1在windows系统下,安装workerman

    一 首先你要在项目里安装composer 按照步骤下载 php r copy https install phpcomposer com installer composer setup php php composer setup php
  • Linux(云计算)期末复习资料

    1 linux概述 Linux是一种自由 开放源代码的操作系统 它最初由芬兰的Linus Torvalds在1991年开发 目前已经成为世界上最流行的操作系统之一 Linux操作系统的特点是免费 稳定 安全 可定制 可移植性强 支持多任务
  • mysql索引 文件坏了_MySQL索引失效的几种情况

    1 索引无法存储null值 a 单列索引无法储null值 复合索引无法储全为null的值 b 查询时 采用is null条件时 不能利用到索引 只能全表扫描 为什么索引列无法存储Null值 a 索引是有序的 NULL值进入索引时 无法确定其
  • ASTM 协议

    ASTM 协议为标准组织美国材料实验室协会 ASTM 制定的在医疗临床实验室仪器和计算机系统间传输信息的一个标准 此标准有多个版本 本文中提到的版本为 E1394 97 下文中提到的 ASTM 均为 ASTM 的 E1394 97 是在 1
  • Kettle系列(一)下载安装与基础配置

    Kettle系列 一 下载安装与基础配置 说明 一 下载 二 目录结构 三 基础配置 1 环境变量 2 kettle配置 四 连接mysql8 五 连接其他数据库 六 总结 说明 更新时间 2023 08 13 17 47 本文记录了win
  • spring cloud系列学习(十、 使用Spring Security实现OAuth2授权认证存储redis)

    1 新增spring boot 导包
  • AOP获取方法返回值

    我们用Spring的AOP切面做日志收集或者记录的时候 在springboot中用 Aspect注解 比如 Aspect public class AdviceTest Before execution com abc service ma