SpringBoot+Gradle实现AOP

来源:互联网 发布:特朗普执政知乎 编辑:程序博客网 时间:2024/06/06 17:34

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@Componentpublic 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方法,打印日志如下:

这里写图片描述

原创粉丝点击