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. ...
随机推荐
- 典型相关分析 CCA
最近有小伙伴在问我一个数据分析的问题, 做毕设, 实证分析. 不知道改如何处理数据. 看了下设计的量表大致是这样的, 都是 5级的里克特量表, 大致分为两波, X, Y. 小伙伴认为就只有两个变量, ...
- 全网最全!1500+ 免费、美观的前端网页模板,建站神器(包括HTML、Vue、Angular、React等)!
前言 经常有小伙伴问我 Vue.React.Bootstrap 或者 Angular 这些有好看且免费的前端模板推荐的吗?今天大姚给大家分享一个宝藏网站,它汇聚了1500+ 免费.美观的前端网页模板, ...
- 「Log」做题记录 2023.10.30-2023.11.26
\(2023.10.30-2023.11.5\) \(\color{blueviolet}{AT\_abc285\_g}\) 神秘题. 网络流是显著的,建边方式如下: 所有边容量都为 \(1\). 每 ...
- [CRCI2008-2009] CVJETICI
[CRCI2008-2009] CVJETICI 观察图片及样例一: 注:下文中的被占领,指的是在这一个区间内,才有交叉开花的可能. 第一张小图发现 $2 \sim 3$ 被占领. 第二张小图发现 $ ...
- 探秘Transformer系列之(36)--- 大模型量化方案
探秘Transformer系列之(36)--- 大模型量化方案 目录 探秘Transformer系列之(36)--- 大模型量化方案 0x00 概述 0x01 8位量化 1.1 LLM.int8() ...
- Java 锁升级机制详解
Java 锁升级机制详解 引言 最近有个三年左右的兄弟面试java 被问到这样一道经典的八股文面试题: 你讲讲java里面的锁升级? 他感觉回答的不是很好,然后回去找资料学习了一波,然后下面是他输出的 ...
- SAP发布简易REST 三:API平台之接口文档
为了完善API接口,增强友好性,做了一点小文档展示. 新建配置表:(用来做接口参数配置展示使用,不在程序中应用) 因为需要给每个接口一个对应的名字,所以在原来的API控制表中增加一个文本字段. 这里加 ...
- @Link双向绑定和@Provide、Consume跨层传递、@Observed&@ObjectLink更改多层结构的数据
@Link 双向同步 使用 @Link 可以实现父组件和子组件的双向同步 使用步骤: 1.将父组件的状态属性传递给子组件 2.子组件通过@Link修饰即可 基本数据类型和复杂数据类型都是可以的哈 @L ...
- Blazor学习之旅(4)数据共享
本篇,我们来了解下在Blazor中数据是如何共享的,组件之间又该如何传递参数. 关于Blazor组件 在 Blazor 中,从名为"组件"的自包含代码部分生成 UI.每个组件都可以 ...
- 在Ubuntu上使用Certbot申请Let’s Encrypt SSL证书
1 引言 要使用HTTPS就必须得有SSL证书.理论上,证书是可以通过像OpenSSL这样得工具生成的.不过这种证书只能自己测试用,浏览器上面是不认的,会提示用户不安全.也就是说,浏览器只接受一些特定 ...