diff --git a/src/main/java/com/inspect/nvr/aop/TimeTrace.java b/src/main/java/com/inspect/nvr/aop/TimeTrace.java new file mode 100644 index 0000000..938b57b --- /dev/null +++ b/src/main/java/com/inspect/nvr/aop/TimeTrace.java @@ -0,0 +1,12 @@ +package com.inspect.nvr.aop; + +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 TimeTrace { + String value() default ""; +} diff --git a/src/main/java/com/inspect/nvr/aop/TimeTraceAspect.java b/src/main/java/com/inspect/nvr/aop/TimeTraceAspect.java new file mode 100644 index 0000000..ca869bb --- /dev/null +++ b/src/main/java/com/inspect/nvr/aop/TimeTraceAspect.java @@ -0,0 +1,26 @@ +package com.inspect.nvr.aop; + +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.stereotype.Component; + +@Aspect +@Component +@Slf4j +public class TimeTraceAspect { + @Around("@annotation(TimeTrace)") + public Object trace(ProceedingJoinPoint joinPoint) throws Throwable { + long start = System.currentTimeMillis(); + try { + return joinPoint.proceed(); + } finally { + long end = System.currentTimeMillis(); + long duration = end - start; + // 获取方法签名 + String methodName = joinPoint.getSignature().toShortString(); + log.info("方法 {} 执行耗时: {} ms", methodName, duration); + } + } +}