码迷,mamicode.com
首页 > 编程语言 > 详细

spring boot 基础之使用AOP统一处理请求日志使用方法

时间:2018-03-28 15:41:48      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:java   nal   type   word   aspectj   返回   string   asp   framework   

面向切面(AOP)Aspect Oriented Programming是一种编程范式,与语言无关,是一种程序设计思想,它也是spring的两大核心之一。不了解的可以看下慕课网的视频讲解。以下是个人学习视频后整理出来的关键代码。 
添加Aop依赖

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

创建一个处理文件,在类上添加@Aspect注解,再用@Component将类加入到spring容器中去

package com.xu.demo_springboot_01.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;//spring自带的日志框架
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;

@Aspect
@Component//将这个类引入spring容器中去
public class HttpAspect {

    private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);   //参数为当前使用的类名

    @Pointcut("execution(public * com.xu.demo_springboot_01.controller.GirlController.*(..))")   //要处理的方法,包名+类名+方法名
    public void cut(){
    }

    @Before("cut()")//在调用上面 @Pointcut标注的方法前执行以下方法
    public void doBefore(JoinPoint joinPoint){//用于获取类方法
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request =  attributes.getRequest();
        //url
        logger.info("url ={}",request.getRequestURI());
        //method
        logger.info("method={}",request.getMethod());
        //ip
        logger.info("ip={}",request.getRemoteAddr());
        //类方法
        logger.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+‘.‘+ joinPoint.getSignature().getName());//获取类名及类方法
        //参数
        logger.info("args={}",joinPoint.getArgs());
    }

    @After("cut()")//无论Controller中调用方法以何种方式结束,都会执行
    public void doAfter(){
        logger.info("----doAfter-----------");
    }

    @AfterReturning(returning = "obj",pointcut = "cut()")//在调用上面 @Pointcut标注的方法后执行。用于获取返回值
    public void doAfterReturning(Object obj){
        logger.info("response={}",obj.toString());
    }
}

PS:导包要注意,导包要注意,导包要注意~
注:

//记录日志变量的方法
logger.info("url ={}",request.getRequestURI());//逗号后面跟要记录的变量
//记录日志常量
logger.info("url");

spring boot 基础之使用AOP统一处理请求日志使用方法

标签:java   nal   type   word   aspectj   返回   string   asp   framework   

原文地址:https://www.cnblogs.com/leeIndex/p/8663640.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!