创建一个拦截器,拦截所有请求,统计每个方法执行的时间
时间: 2024-03-05 11:51:00 浏览: 40
好的,你可以使用 Spring AOP 来实现这个拦截器,具体步骤如下:
1. 定义一个切面类,在类上使用 @Aspect 注解标记该类为切面类。
2. 在切面类中定义一个方法,使用 @Around 注解标记该方法为环绕通知。
3. 在环绕通知中,使用 ProceedingJoinPoint 参数获取当前被拦截的方法及其参数,并记录开始时间。
4. 在方法执行完毕后,记录结束时间,并计算方法执行时间。
5. 最后将执行时间输出到日志中或者存储到数据库中。
下面是一个示例代码:
```java
@Aspect
@Component
public class PerformanceInterceptor {
@Around("execution(* com.example.demo.*.*(..))")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
long startTime = System.currentTimeMillis();
Object result = joinPoint.proceed();
long endTime = System.currentTimeMillis();
long duration = endTime - startTime;
String methodName = joinPoint.getSignature().getName();
String className = joinPoint.getTarget().getClass().getSimpleName();
String logMessage = String.format("Execution time of %s.%s: %d ms", className, methodName, duration);
System.out.println(logMessage);
return result;
}
}
```
上述代码中,@Around 注解中的 "execution(* com.example.demo.*.*(..))" 表示拦截 com.example.demo 包下的所有方法。你可以根据需要修改该表达式以匹配需要拦截的方法。