@Slf4j @Component @Aspect//aop类 public class TimeAspect { /*Around 环绕通知 用ProceedingJoinPoint @Before 前置通知 用JoinPoint(是ProceedingJoinPoint的父类型),用它可以获得方法执行的相关信息,如目标类名,方法名,方法参数 @After 后置通知 用JoinPoint ,jpinPoint.getTargrt(),getClass().getName();(获取目标类名) @AfterReturning 返回后通知 用JoinPoint ,jpinPoint.getSignstrue();(获取目标方法签名) *@AfterThrowing 异常后通知 用JoinPoint ,jpinPoint.getSignature().getName();(获取目标方法名) ,jpinPoint.getArgs();(获取目标方法运行参数) */ //@annotation切入点表达式,用于匹配有特点注解的方法 //@annotation(com.itheima.aop.MyLog)仅仅匹配上面加有@MyLog注解的方法 //execution切入点表达式,主要根据方法的返回值,包名,类名,方法名,方法参数等信息来匹配 // 例如:execution(void com.itheima.service.impl.empserviceimpl.getById(java.lang.Integer));execution切入点表达式 @Around("execution(* com.itheima.service.*.*(..))") //切入点表达式 public Object recordTime(ProceedingJoinPoint joinPoint) throws Throwable { long begin=System.currentTimeMillis(); Object result = joinPoint.proceed();//目标方法放行 long end =System.currentTimeMillis(); log.info(joinPoint.getSignature()+"方法执行耗时:{}ms",end-begin); return result; } }