Java Aop 实现自定义注解 日志注解

首先,定义自定义注解@CustomLog

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD) // 表明这个注解用于方法
@Retention(RetentionPolicy.RUNTIME) // 运行时保留注解
public @interface CustomLog {
    String value() default ""; // 可以为注解定义一个value属性,用于存储日志信息
}

然后,定义AOP切面类CustomLogAspect,并使用@Aspect@Component等注解来声明它是一个切面组件:

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class CustomLogAspect {

    private static final Logger logger = LoggerFactory.getLogger(CustomLogAspect.class);

    // 定义一个切点,匹配所有带有@CustomLog注解的方法
    @Pointcut("@annotation(com.lj.demo.annotation.CustomLog)")
    public void customLogPointcut() {
    }

    // 环绕通知,用于在方法执行前后记录日志
    @Around("customLogPointcut()")
    public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
        // 获取注解上的value值
        CustomLog customLog = joinPoint.getSignature().getAnnotation(CustomLog.class);
        String logValue = customLog.value();

        // 在方法执行前记录日志
        logger.info("开始执行方法: {},日志信息: {}", joinPoint.getSignature().getName(), logValue);

        // 执行方法
        long startTime = System.currentTimeMillis();

        //这是环绕通知的关键部分。调用proceed方法将执行被通知的方法,并返回其结果。
        Object result = joinPoint.proceed();


        long endTime = System.currentTimeMillis();

        // 在方法执行后记录日志
        logger.info("方法执行结束: {},耗时: {}ms", joinPoint.getSignature().getName(), endTime - startTime);

        return result;
    }
}

接下来,在需要记录日志的方法上使用这个自定义注解:

@Service
public class demoService {

    @CustomLog(value = "这是一条自定义日志信息")
    public String doSomething() {
        // 模拟业务逻辑
        System.out.println("执行doSomething方法...");
        return "执行成功";
    }
}

最后,确保你的Spring Boot项目已经包含了AOP的依赖(spring-boot-starter-aop),并且Spring AOP的自动配置没有被禁用。

现在,当你运行你的Spring Boot应用并调用demoService中的doSomething方法时,你应该会在日志中看到由CustomLogAspect切面打印的日志信息。这些信息包括方法开始执行的日志、自定义的日志信息,以及方法执行结束和耗时信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值