
@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;
}
}