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 {
@Log
public 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) {
// 入参是否为 user
if (arg instanceof User) {
log.info("------->入参为user={}", (User)arg);
}
log.info("----->入参 arg={}", arg);
}
// 获取出参
Object result = proceedingJoinPoint.proceed();
// 出参是否为 user
if (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 {
@Autowired
private AopService aopService;
@Test
void 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 获取入参和出参的更多相关文章
- 关于用mybatis调用存储过程时的入参和出参的传递方法
一.问题描述 a) 目前调用读的存储过程的接口定义一般是:void ReadDatalogs(Map<String,Object> map);,入参和出参都在这个map里 ...
- 字节码编程,Javassist篇二《定义属性以及创建方法时多种入参和出参类型的使用》
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 在上一篇 Helloworld 中,我们初步尝试使用了 Javassist字节编程的 ...
- Spring AOP获取不了增强类(额外方法)或无法通过getBean()获取对象
Spring AOP获取不了增强类(额外方法)和无法通过getBean()获取对象 今天在学习AOP发现一个小问题 Spring AOP获取不了额外方法,左思右想发现是接口上出了问题 先上代码 获取不 ...
- Spring AOP 自定义注解获取http接口及WebService接口入参和出参
注解方法实现过程中可以采用如下获取方式:—以下为例 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHo ...
- 使用filter获取http请求的出参以及入参
首先 我们的目的是做一个拦截器 能够对http请求做profiler,能够记录本次的调用情况,这里说下如何从http请求中获取到出参的问题. 方案一:参照http://blog.csdn.net/wu ...
- spring aop获取目标对象的方法对象(包括方法上的注解)
这两天在学习权限控制模块.以前看过传智播客黎活明老师的巴巴运动网视频教程,里面就讲到权限控制的解决方案,当时也只是看看视频,没有动手实践,虽说看过几遍,可是对于系统中的权限控制还是很迷茫,所以借着这次 ...
- Spring AOP: 织入的顺序
spring AOP 采用和 AspectJ 一样的优先顺序来织入增强处理:在进入连接点时,高优先级的增强处理将先被织入:在退出连接点时,高优先级的增强处理会后被织入. 当不同的切面里的两个增强处理需 ...
- Spring AOP获取拦截方法的参数名称跟参数值
注意:这种方式需要JDK1.8版本支持 开始:http://www.cnblogs.com/wing7319/p/9592184.html 1.aop配置: <aop:aspectj-autop ...
- Spring AOP获取方法的参数名称和参数值
aop配置: <aop:aspectj-autoproxy expose-proxy="true" /> @Before(value = "execution ...
- spring aop 获取request、response对象
在网上看到有不少人说如下方式获取: 1.在web.xml中添加监听 <listener> <listener-class> org. ...
随机推荐
- 双向 和 多重 RNN
前面已经对 RNN (递归神经网络) 的变体 (主要为解决 梯度消失和梯度爆炸) 接触了两个比较流行的 LSTM 和 GRU, 其核心思想呢, 是通过其所谓 **"gate" ** ...
- FMEA方法,排除架构可用性隐患的利器
极客时间:<从 0 开始学架构>:FMEA方法,排除架构可用性隐患的利器 FMEA 方法,就是保证我们做到全面分析的一个非常简单但是非常有效的方法. 1.FMEA 介绍 FMEA(Fail ...
- Visual Studio 2019 + GLFW + GLAD
!!!如果文件正常引入,但依然各种报错找不到C++源文件,可能是版本问题 即现在是x64,调成x32,以及glfw建议下载32版本 参考文章:https://blog.csdn.net/zjz520y ...
- 杂七杂八系列----浅谈.NET微服务架构的演变
服务架构的演变 单体架构=>分布式架构=>SOA架构=>微服务架构=>Service Mesh=>Cloud Native 单体架构/垂直架构 分布式架构 SOA架构 微 ...
- web29~web39
参考博客: https://blog.csdn.net/m0_62422842/article/details/125507970 https://www.cnblogs.com/amazingman ...
- manim边做边学--参数化曲线
在数学可视化领域,参数方程提供了一种灵活描述曲线的方式. Manim库中的ParametricFunction类正是为此而生,它允许用户通过参数方程创建各种复杂的二维和三维曲线. Parametric ...
- HNU FPGA课设项目上手指南
1.介绍 本文章旨在帮助HNU的同学更优雅的完成数电的FPGA课设(使用DE2-115),文章将涉及完成FPGA项目需要掌握的知识,资源分享以及一些关于完成项目的经验指导.大家快快搬好小板凳,准备发车 ...
- Es简单条件查询
一:先看一下es的语句以及查询结果: 我这边使用的条件是is_device要么是工控要么是资产 二:java代码部分 关于es的操作,java里面不需要添加mapper层,只要在service以及c ...
- 2025盘古石决赛-计算机&手机
手机取证 分析鸿蒙手机检材,打网球定的日期是?[标准格式:4月5日] 在日历数据中 3月3日 分析鸿蒙手机检材,哪个浏览器搜索过鸿蒙开发教程?[标准格式:百度浏览器] uc数据搜索过 UC浏览器 分析 ...
- 《机器人SLAM导航核心技术与实战》第1季:第12章_典型自主导航系统
<机器人SLAM导航核心技术与实战>第1季:第12章_典型自主导航系统 视频讲解 [第1季]12.第12章_典型自主导航系统-视频讲解 [第1季]12.1.第12章_典型自主导航系统_ro ...