1.新增注解
import java.lang.annotation.*;
/**
* @author chendongliang
*/
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TimeConsuming{
}
2.新增Aspect
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
/**
* @author: chendongliang
* @date: 2023/7/15 20:20 34
*/
@Aspect
@Component
public class TimeConsumingAspect {
private Logger logger = LoggerFactory.getLogger(TimeConsumingAspect.class);
@PostConstruct
public void init(){
}
@Pointcut("@annotation(com.lehuopai.xfacade.common.annoation.TimeConsuming)")
public void verifyPointCut() {
}
@Around("verifyPointCut()")
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
Object obj = null;
try {
long beginTime = System.currentTimeMillis();
obj = joinPoint.proceed();
//获取方法名称
String method = joinPoint.getSignature().getName();
//获取类名称
String clazz = joinPoint.getSignature().getDeclaringTypeName();
//计算耗时
long cost = System.currentTimeMillis() - beginTime;
logger.info("类:[{}],方法:[{}] 接口耗时:[{}]", clazz, method, cost + "毫秒");
} catch (Throwable throwable) {
throwable.printStackTrace();
}
return obj;
}
}
至此,统计接口耗时就已经实现了,将@TimeConsuming加到所需要统计的方法上即可,如下所示:
结果如下: