当前位置: 首页 > news >正文

Aop实现简单基于日志记录

目录

一、基础知识:

二、测试记录接口的参数和结果


一、基础知识:

  • @Before:用于执行目标方法之前的逻辑。
  • @After:用于执行目标方法之后的逻辑。
  • @AfterReturning:用于获取目标方法返回值后的逻辑。
  • @AfterThrowing:用于处理目标方法抛出异常后的逻辑。
  • @Around:用于在目标方法执行前后执行逻辑,并可控制是否执行目标方法。
  • @Pointcut:用于定义切入点,指定哪些方法将被通知。

二、测试记录接口的参数和结果

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Loggable {
    String value() default "";

}
@Aspect
@Component
@Slf4j
public class LoggingAspect {

    @Pointcut("@annotation(loggable)")
    public void loggableMethod(Loggable loggable) {}


    @Around("loggableMethod(loggable)")
    public Object logAround(ProceedingJoinPoint joinPoint, Loggable loggable) throws Throwable {
        // 获取方法名和参数
        String methodName = joinPoint.getSignature().getName();
        Object[] args = joinPoint.getArgs();

        log.info("Starting method: {}", methodName);
        log.info("Request parameters: {}", Arrays.toString(args));

        // 调用目标方法并获取返回值
        Object result = joinPoint.proceed();

        log.info("Finished method: {}", methodName);
        log.info("Response: {}", result);

        return result; // 返回结果
    }

    @Before("loggableMethod(loggable)")
    public void logBefore(JoinPoint joinPoint, Loggable loggable) {
        log.info("Starting method: {}", joinPoint.getSignature().getName());
        log.info("Request parameters: {}", Arrays.toString(joinPoint.getArgs()));
    }

    @After("loggableMethod(loggable)")
    public void logAfter(JoinPoint joinPoint, Loggable loggable) {
        log.info("Finished method: {}", joinPoint.getSignature().getName());
    }
}

结果:

http://www.dtcms.com/a/68987.html

相关文章:

  • 基于Android的记事本APP设计与实现:从需求分析到功能实现(超级简单记事本,附源码+文档报告)
  • SpringDataRedis存储Redis的数据序列化
  • centos 8安装及相关操作
  • 外层元素旋转,其包括在内的子元素一并旋转(不改变旋转中心),单元测试
  • 线程同步:多线程编程的核心机制
  • 确定一个数字是否为 2 的幂
  • 为什么 Young GC 比 Full GC 快
  • 北京迅为iTOP-RK3568开发板OpenHarmony系统南向驱动开发实操-HDF驱动配置LED
  • Muduo库的简介与使用
  • Java常用算法
  • 使用Fluent-bit将容器标准输入和输出的日志发送到Kafka
  • 序列化和反序列化TCP粘包问题
  • 性能调优与抓包分析:TCP三次握手、CDN优化与Wireshark实战
  • 【Git】配置Git
  • 软考计算机知识-流水线
  • 【云原生】动态资源分配(DRA)深度洞察报告
  • 技术速递|Visual Studio Code 2025年2月更新(v1.98)
  • 网络华为HCIA+HCIP数据链路层协议-以太网协议
  • 手写一个简易版的tomcat
  • 解释VLA和具身智能之间的关系
  • 神经网络中常用语言特性(python)(待完善)
  • 视创云展:打造沉浸式体验环境,助力企业线上营销
  • 【multisim设计一个数控脉宽脉冲信号发生器电路图】2022-9-14
  • Linux》Ubuntu》Docker >>安装中文版GitLab compose
  • Modbus TCP到RTU:轻松转换指南!
  • [Java实战]性能优化qps从1万到3万
  • LinuX---Shell---流程控制
  • Android 打包module为jar和aar包 基础
  • 从单品互联到全屋智能:BLE协议如何引爆下一代家居交互革命
  • Python 玩转接口自动化测试!(实战)