深自缄默,如云漂泊|

booleandev

园龄:4年1个月粉丝:1关注:1

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

本文作者:booleandev

本文链接:https://www.cnblogs.com/booleandev/p/18297849/spring-aop-gets-into-the-parameters-and-out-of-the-parameters-z2jwrkn

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   booleandev  阅读(39)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起