Spring Aop 获取入参和出参

本贴最后更新于 1540 天前,其中的信息可能已经时过境迁

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

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    946 引用 • 1460 回帖 • 1 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3194 引用 • 8214 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...