@Aspect:描述一個切面類,定義切面類的時候須要打上這個註解java
@Component:spring-boot配置類web
package com.*.*.tools; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.*; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.util.Arrays; @Aspect @Component public class LogAspect { /** * 功能描述: 攔截對這個包下全部方法的訪問 * * @param:[] * @return:void **/ @Pointcut("execution(* com.*.*.controller.*..*(..))") public void loginLog() { } // 前置通知 @Before("loginLog()") public void loginBefore(JoinPoint joinPoint) { // 咱們從請求的上下文中獲取request,記錄請求的內容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); System.out.println("請求路徑 : " + request.getRequestURL()); System.out.println("請求方式 : " + request.getMethod()); System.out.println("方法名 : " + joinPoint.getSignature().getName()); System.out.println("類路徑 : " + joinPoint.getSignature().getDeclaringTypeName()); System.out.println("參數 : " + Arrays.toString(joinPoint.getArgs())); } // @AfterReturning(returning = "object", pointcut = "loginLog()") // public void doAfterReturning(Object object) { // // System.out.println("方法的返回值 : " + object); // } // 方法發生異常時執行該方法 @AfterThrowing(throwing = "e",pointcut = "loginLog()") public void throwsExecute(JoinPoint joinPoint, Exception e) { System.err.println("方法執行異常 : " + e.getMessage()); } // 後置通知 // @After("loginLog()") // public void afterInform() { // // System.out.println("後置通知結束"); // } // 環繞通知 @Around("loginLog()") public Object surroundInform(ProceedingJoinPoint proceedingJoinPoint) { long startTime=System.currentTimeMillis(); try { Object o = proceedingJoinPoint.proceed(); long times=System.currentTimeMillis()-startTime; MethodSignature signature = (MethodSignature) proceedingJoinPoint.getSignature(); String methodName = signature.getDeclaringTypeName() + "." + signature.getName(); System.out.println("【"+methodName+"】執行時間:" +times/1000+"s" ); return o; } catch (Throwable e) { e.printStackTrace(); return null; } } }