SpringBoot中AOP的简单实现。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zj20142213/article/details/80808455

在SpringBoot中实现AOP很简单。
1、添加依赖:

//注意依赖的版本

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2、定义切面:
WebLogAspect.java

package com.fangshuo.Aspect;

import java.util.Arrays;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

@Aspect  
@Component  
public class WebLogAspect {  

    private Logger logger = Logger.getLogger(getClass());  
    @Pointcut("execution(public * com.fangshuo.controller.*.*(..))")  
    public void webLog(){}  

    @Before("webLog()")  
    public void doBefore(JoinPoint joinPoint) throws Throwable {  
        // 接收到请求,记录请求内容  
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();  
        HttpServletRequest request = attributes.getRequest();  

        // 记录下请求内容  
        logger.info("URL : " + request.getRequestURL().toString());  
        logger.info("HTTP_METHOD : " + request.getMethod());  
        logger.info("IP : " + request.getRemoteAddr());  
        logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());  
        logger.info("ARGS : " + Arrays.toString(joinPoint.getArgs()));  

    }  

    @AfterReturning(returning = "ret", pointcut = "webLog()")  
    public void doAfterReturning(Object ret) throws Throwable {  
        // 处理完请求,返回内容  
        logger.info("RESPONSE : " + ret);
    }  

}  

整个AOP的代码结构如下:
这里写图片描述

注意点:

在后置通知中returning = “ret”中定义的参数名必须和通知方法受那个的参数匹配,即returning = “ret”中定义的是ret,通知方法中也必须是”ret”,否则将抛出异常。

  @AfterReturning(returning = "ret", pointcut = "webLog()")  
    public void doAfterReturning(Object ret) throws Throwable {  
        // 处理完请求,返回内容  
        logger.info("RESPONSE : " + ret);
    }  

3、参考文章:
spring aop 面向切面编程初接触
Spring AOP(二)之AfterReturning增强处理

猜你喜欢

转载自blog.csdn.net/zj20142213/article/details/80808455
今日推荐