SpringBoot+Gradle实现AOP

1.搭建SpringBoot+Gradle项目,可参考:《SpringBoot+Gradle运行简单Demo Eclipse》
2.在gradle.build中添加jar包引用:

compile 'org.springframework.boot:spring-boot-starter-aop'

3.创建AspectLog.java类(类名可自定义):

package com.david.translate.aspect;

import javax.servlet.http.HttpServletRequest;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

@Aspect
@Component
public class AspectLog {

    Logger log = LoggerFactory.getLogger(AspectLog.class);

    /**
     * http访问方法之前 切入
     * 1.com.david.translate.controller.*.*
     * 这个路径 是一直要指定到你的方法层级。
     * 如:com.david.translate.controller.UserController。java 
     * 需要配置的execution就是  com.david.translate.controller.*.*(..)
     * 第一个*指的是controller 下的所有类
     * 第二个*指的是类里面的所有方法
     * 2.如果这块指定的目录没有到方法,则会跑出异常。
     * @param join
     */
    @Before("execution(public * com.david.translate.controller.*.*(..))")
    public void beforLog(JoinPoint join){
        ServletRequestAttributes attriButes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attriButes.getRequest();

        //打印url
        log.info("url:{}", request.getRequestURL());

        //打印请求方式
        log.info("requet_method:{}", request.getMethod());

        //打印类方法 
        log.info("class_method:{}", join.getStaticPart().getSignature().getDeclaringTypeName()
                + "." 
                + join.getSignature().getName());
        //打印参数
        log.info("parameter:{}", join.getArgs());

        //打印Ip
        log.info("ip:{}", request.getLocalAddr());
    }

    /**
     * http访问方法之后切入
     */
    @After("execution(public * com.david.translate.controller.*.*(..))")
    public void afterLog(){
        log.info("http request after info!");
    }

    /**
     * 打印返回的数据
     * 1.returning 的值 和 resultLog中的入参一致
     * 2.pointcut 配置的是需要切入的配置
     * @param obj
     */
    @AfterReturning(returning="obj", pointcut="execution(public * com.david.translate.controller.*.*(..))")
    public void resultLog(Object obj){
        log.info("return:{}", obj.toString());
    }
}

3.编译并运行Spring Boot,并访问controller方法,打印日志如下:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值