1. 程式人生 > >springBoot AOP切面程式設計

springBoot AOP切面程式設計

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