springBoot AOP切面程式設計
阿新 • • 發佈:2018-11-01
AOP 為 Aspect Oriented Programming 的縮寫,意為 面向切面程式設計。AOP 為spring 中的一個重要內容,它是通過對既有程式定義一個切入點,然後在其前後切入不同的執行內容。
AOP 不會破壞原有程式的邏輯,很好的和業務邏輯進行隔離,耦合度低。
常用比如AOP 的日誌記錄。
1.pom加入AOP依賴包
<!--AOP切面 start--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <!--AOP切面 end-->
2.建立LogAspect 類,該類必須在 主程式的掃包範圍內
@Aspect @Component @Slf4j public class LogAspect { @Pointcut("execution(public * 掃包路徑..*.*(..))")public void LogHelp() { } @Pointcut("execution(public * 掃包路徑..*.*(..))") public void LogErrorHelp() { } @Before("LogHelp()") public void doBefore(JoinPoint joinPoint) throws Throwable { // 接收到請求,記錄請求內容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request= attributes.getRequest(); // 記錄下請求內容 System.out.println("URL : " + request.getRequestURL().toString()); System.out.println("HTTP_METHOD : " + request.getMethod()); System.out.println("IP : " + request.getRemoteAddr()); System.out.println("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName()); System.out.println("ARGS : " + Arrays.toString(joinPoint.getArgs())); } @AfterReturning(returning = "ret", pointcut = "LogHelp()") public void doAfterReturning(Object ret) throws Throwable { // 處理完請求,返回內容 System.out.println("方法的返回值 : " + ret); } @AfterThrowing("LogErrorHelp()") public void doAfterThrowing(JoinPoint jp) { System.out.println("方法異常時執行....."); System.out.println(jp.toString()); } }//end