首页 > 其他分享 >Spring Aop 获取入参和出参

Spring Aop 获取入参和出参

时间:2024-07-12 10:52:57浏览次数:15  
标签:result 01 参和出 2021 Spring user Aop public User

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

标签:result,01,参和出,2021,Spring,user,Aop,public,User
From: https://www.cnblogs.com/booleandev/p/18297849/spring-aop-gets-into-the-parameters-and-out-

相关文章

  • Spring AOP 切面执行顺序
    1.概述1.1术语SpringAOP的相关术语:Aspect:切面,由一系列切点、增强和引入组成的模块对象,可定义优先级,从而影响增强和引入的执行顺序。事务管理(Transactionmanagement)在java企业应用中就是一个很好的切面样例。Joinpoint:接入点,程序执行期的一个点,例如方法执行、类初始化、......
  • Java毕业设计基于Vue+SpringBoot的电影院订票选座管理系统(代码+数据库+文档LW+运行成
    很多朋友发现后期找不到文章,收藏关注不迷路文章目录项目介绍技术介绍项目界面关键代码目录项目介绍在飞速发展的今天,网络已成为人们重要的交流平台。电影院每天都有大量的需要通过网络发布,为此,本人开发了一个基于B/S;浏览器/服务器;模式的电影院管理系统。该系......
  • Java毕业设计基于Vue+SpringBoot的畅游游戏销售平台(代码+数据库+文档LW+运行成功)
    很多朋友发现后期找不到文章,收藏关注不迷路文章目录项目介绍技术介绍项目界面关键代码目录项目介绍近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,畅游游戏销售平台利用计算机网络实现信息化管理,使整个畅游游戏销售平......
  • Java毕业设计基于Vue+SpringBoot的爱看漫画小程序(代码+数据库+文档LW+运行成功)
    很多朋友发现后期找不到文章,收藏关注不迷路文章目录项目介绍技术介绍项目界面关键代码目录项目介绍相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低爱看漫画的运营人员成本,实现了爱看漫画的标准化、制度化、程序化的管理,有效地防止了爱看漫画的随意管......
  • 使用Spring Boot集成Elasticsearch
    使用SpringBoot集成Elasticsearch大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!Elasticsearch是一个分布式搜索和分析引擎,特别适用于处理海量数据。本文将详细介绍如何在SpringBoot项目中集成Elasticsearch,包括环境配置、基本CRUD操作和常见问题的解......
  • 使用Spring Boot实现任务调度
    使用SpringBoot实现任务调度大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在日常开发中,任务调度是一个非常常见的需求,例如定时清理日志、定时备份数据、定时发送通知等。SpringBoot提供了强大的任务调度功能,可以方便地实现定时任务。本文将详细介绍如......
  • 使用Spring Boot实现文件上传功能
    使用SpringBoot实现文件上传功能大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在这篇文章中,我们将详细介绍如何使用SpringBoot实现文件上传功能。这是一个常见的需求,无论是处理用户上传的图片、文档,还是其他类型的文件,了解并掌握文件上传的实现是非常......
  • 基于java+springboot+vue实现的在线教育系统(文末源码+Lw)111
    基于SpringBoot+Vue的实现的在线教育系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包)系统功能:本在线教育系统管理员功能有个人中心,用户管理,讲师管理,普通管理员管理,课程管理员管理,课程管理,课程分类管理,教师管理,名师管理,系统管理,订单管理。普通管理员和课程......
  • 基于java+springboot+vue实现的作业管理系统(文末源码+Lw)110
    基于SpringBoot+Vue的实现的作业管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包)功能描述:作业管理系统有管理员,教师,学生三个角色。教师和学生都可以进行注册然后再登录。学生可以修改自己的密码,查看和下载作业信息,并且可以提交自己写好的作业,并且可以......
  • SpringBoot2.6.13版本引入Swagger
    1.引入依赖<!--https://mvnrepository.com/artifact/io.springfox/springfox-swagger2--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>3.0.0</version&g......