Spring Aop 获取入参和出参

1. 概述

本次,我利用 Spring Aop 的注解方式获取切入点的入参和出参,因为比较简单,所以就直接上代码了。

2. 代码编写

注解类

/*** 日志注解** @author Jiantao Yan* @title: Log* @date 2021/1/5 20:33*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {}

切入点

/*** AOP 切入点测试** @author Jiantao Yan* @title: AopService* @date 2021/1/5 20:29*/
@Slf4j
@Service
public class AopService {@Logpublic User save(User user) {log.info("------>save user={}", user);return user;}
}

切面

/*** 日志切面** @author Jiantao Yan* @title: LogAspect* @date 2021/1/5 20:33*/
@Slf4j
@Aspect
@Component
public class LogAspect {/*** 以注解为切入点*/@Pointcut("@annotation(com.tao.leanrn.demo.aop.Log)")public void pointcut() {}/*** 环绕通知* @param proceedingJoinPoint*/@SneakyThrows@Around("pointcut()")public void around(ProceedingJoinPoint proceedingJoinPoint) {// 获取入参Object[] args = proceedingJoinPoint.getArgs();for (Object arg : args) {// 入参是否为 userif (arg instanceof User) {log.info("------->入参为user={}", (User)arg);}log.info("----->入参 arg={}", arg);}// 获取出参Object result = proceedingJoinPoint.proceed();// 出参是否为 userif (result instanceof User) {log.info("------->入参为user,result={}", (User)result);}log.info("----->出参.result={}", result);}
}

实体类

/*** 用户** @author Jiantao Yan* @title: User* @date 2021/1/5 20:30*/
@Data
public class User {private Long id;private String username;private Integer age;
}

3. 结果验证

单元测试编写

@Slf4j
@SpringBootTest
class AopServiceTest {@Autowiredprivate AopService aopService;@Testvoid save() {User user = new User();user.setId(1L);user.setAge(19);user.setUsername("booleandev");User user1 = aopService.save(user);log.info("------------->user1={}", user1);}
}

结果

2021-01-05 21:01:13.759  INFO 7440 --- [           main] com.tao.leanrn.demo.aop.LogAspect        : ------->入参为user=User(id=1, username=booleandev, age=19)
2021-01-05 21:01:13.774  INFO 7440 --- [           main] com.tao.leanrn.demo.aop.LogAspect        : ----->入参 arg=User(id=1, username=booleandev, age=19)
2021-01-05 21:01:13.786  INFO 7440 --- [           main] com.tao.leanrn.demo.aop.AopService       : ------>save user=User(id=1, username=booleandev, age=19)
2021-01-05 21:01:13.787  INFO 7440 --- [           main] com.tao.leanrn.demo.aop.LogAspect        : ------->入参为user,result=User(id=1, username=booleandev, age=19)
2021-01-05 21:01:13.787  INFO 7440 --- [           main] com.tao.leanrn.demo.aop.LogAspect        : ----->出参.result=User(id=1, username=booleandev, age=19)
2021-01-05 21:01:13.787  INFO 7440 --- [           main] com.tao.leanrn.demo.aop.AopServiceTest   : ------------->user1=null

Spring Aop 获取入参和出参相关推荐

  1. spring aop自定义切面打印入参和出参,以及切面获取注解的字段值.

    controller代码 @ApiOperation(value = "检查是否有兑换次数", response = Boolean.class)@ApiImplicitParam ...

  2. aop 获取方法入参出参_ASM字节码编程 | JavaAgent+ASM字节码插桩采集方法名称及入参和出参结果并记录方法耗时...

    作者:小傅哥 博客:bugstack.cn ❝ 沉淀.分享.成长,让自己和他人都能有所收获! ❞ 一.前言 在我们实际的业务开发到上线的过程中,中间都会经过测试.那么怎么来保证测试质量呢?比如:提交了 ...

  3. AOP注解@Before、@AfterReturning拦截单个方法的入参和出参,纯注解方式(附源码下载),解决单个方法不生效问题(一)

    AOP注解@Before.@AfterReturning拦截单个方法的入参和出参,纯注解方式(附源码下载),解决单个方法不生效问题(一) 问题背景 AOP注解@Before.@AfterReturni ...

  4. springAOP切面获取入参和出参

    老版及参考 https://blog.csdn.net/weixin_33859504/article/details/86997374 新版**** package core.interceptor ...

  5. 彻底解决spring mvc XSS漏洞问题(包括json的格式的入参和出参)

    目录 一,背景 二,名词解释 三,xss修复的一般处理方法 四.扩展jackson定制自己的objectMapper处理json出入参的转义 五.结语 一,背景 昨天收到公司安全部的一封漏洞邮件,说系 ...

  6. Java接口入参和出参规范建议

    把最近项目中遇到的问题跟大家分享下:最近做了一个项目,后端接口写好后和pc端vue联调完毕,业务还需要和App端[ios,andro]对接,问题来了,后端接口中的入参和出参都是Java数据类型[Dat ...

  7. ASM字节码编程 | JavaAgent+ASM字节码插桩采集方法名称以及入参和出参结果并记录方法耗时

    作者:小傅哥 博客:bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 在我们实际的业务开发到上线的过程中,中间都会经过测试.那么怎么来保证测试质量呢?比如:提交了多少代码 ...

  8. Java基础学习总结(168)——为什么推荐在RPC的接口中入参和出参都不要使用枚举

    前言: 为什么推荐在RPC的接口中入参和出参都不要使用枚举.最近,我们的线上环境出现了一个问题,线上代码在执行过程中抛出了一个IllegalArgumentException,分析堆栈后,发现最根本的 ...

  9. Swagger对自定义入参和出参(过滤器)的支持

    _ 这是之前文章 <在asp.net core 下定义统一的入参和出参格式>的高阶应用篇,由于增加了框架级别的入参和出参定义,导致swagger无法识别外部的定义,仅仅识别为控制器方法的定 ...

最新文章

  1. nagios视频教程【原创】
  2. 每日一皮:老大爷,您保持年轻的秘诀是什么
  3. 牛客题霸 NC15 求二叉树的层序遍历
  4. bzoj2538: [Ctsc2000]公路巡逻
  5. oracle 有计划任务吗,oracle计划任务的问题
  6. kafka告警简单方案
  7. linux 按日期复制文件夹,Linux 按文件日期分类文件
  8. 微信上传图文素材接口报41005错误解决方法
  9. 机器学习入门笔记(七):聚类
  10. ICMPv6报文详解
  11. 浅析pc机上如何将vmlinuz-2.6.31-14-generic解压出vmlinux
  12. 常用开源 SLAM 方案
  13. C++:向函数传递对象(对象、对象指针、对象引用)
  14. vfp报表打印到PDF文件中不用输入文件名
  15. 微信网页第三方登录原理
  16. rails中关于carrierwave、kaminari、roo组件分享
  17. 石家庄建工科技学院有计算机专业吗,石家庄建工科技学院官网
  18. 电压源和电流源的区别
  19. ARM64开发板配置Java环境 OrangePi
  20. 中国大学 MOOC Android 性能优化:冷启动优化总结

热门文章

  1. Enter实现Tab键的功能
  2. Linux的判断两个字符串是否相等
  3. 三分法求解凸函数的最值
  4. Vue前端项目部署在tomcat
  5. java基本类型和使用
  6. 我,心在痛。。。。。。
  7. springboot使用flyway
  8. 求一亿个数字里面最小的10个数字
  9. 八零后月薪56K老程序员感慨人生的起起伏伏,跳槽居然没地方让我跳!
  10. 重磅!全球Top 1000计算机科学家公布:张宏江居大陆科学家之首