pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
@Aspect
@Component
public class ServiceLogAspect {
public static final Logger log =
LoggerFactory.getLogger(ServiceLogAspect.class);
/**
* AOP 通知:
* 1. 前置通知: 在方法调用之前进行执行
* 2. 后置通知: 在方法正常调用之后执行
* 3. 环绕通知: 在方法调用前后进行通知执行
* 4. 异常通知: 如果方法调用出现了异常,则通知
* 5. 最终通知: 在方法调用之后执行 类似于finally
*/
/**
* 切面表达式:
* execution 代表所要执行的表达式主体
* 第一处 * 表示方法返回类型 * 代表所有的类型
* 第二处 com.zph.service.impl 代表aop所要扫描监控的包
* 第三处 .. 代表该包以及子包下的所有方法
* 第四处 * 代表类名, 代表所有类
* 第五处 *(..)) * 代表类中的方法名, (..)代表方法中的任何参数
* @param joinPoint
* @return
* @throws Throwable
*/
@Around("execution(* com.zph.service.impl..*.*(..))")
public Object recordTimeLog(ProceedingJoinPoint joinPoint) throws Throwable {
log.info("=== 开始执行 {}.{} ===", joinPoint.getTarget().getClass(), joinPoint.getSignature().getName());
// 记录开始时间
long begin = System.currentTimeMillis();
// 执行目标 service
Object result = joinPoint.proceed();
// 结束时间
long end = System.currentTimeMillis();
return result;
}
}
对service进行监听执行时长结果:
INFO ServiceLogAspect:42 - === 开始执行 class com.zph.service.impl.UserServiceImpl.queryUsernameIsExist ===
INFO HikariDataSource:110 - DateSourceHikariCP - Starting...
INFO HikariDataSource:123 - DateSourceHikariCP - Start completed.
ERROR ServiceLogAspect:56 - ====== 执行结束,耗时:4485 毫秒 ======