七、AOP统一处理以及日志打印

基本概念

AOP 面向切面  
OOP 面向对象
POP 面向过程
1、pom.xml中添加依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2、新建一个Aspect类进行处理
package com.du.aspect;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Aspect
@Component //把文件引入到spring容器中
public class HttpAspect {
    private final  static Logger logger = LoggerFactory.getLogger(HttpAspect.class);
    //..表示该方法内无论是任何参数都会被拦截
    //(..)前面的 * 可以替换为controller中的方法名对特定方法进行拦截
    @Pointcut("execution(public * com.du.controller.GrilController.*(..))")
    public void log(){
    }

    @Before("log()")
    public  void doBefore(){
        logger.info("方法前");
    }
    @After("log()")
    public  void doAfter(){
        logger.error("方法后");
    }
}
这里的Logger是org.slf4j包下的,spring自带的log框架
在公共方法上注解使用@Pointcut 然后在普通法上添加@Before(“方法名()”)注解,是对下面方法的简写
@Before("execution(public * com.du.controller.GrilController.*(..))")
 @Before 方法前

      @After  方法后

      @AfterReturning 接收响应

3、根据业务逻辑在拦截的方法体内写相关代码

@Before("log()")//方法前
public  void doBefore(JoinPoint joinPoint){
   ServletRequestAttributes attributes =  (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
    HttpServletRequest request = attributes.getRequest();
   //url
    logger.info("url={}",request.getRequestURL());
    //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());
}

//获取响应数据
@AfterReturning(returning = "object",pointcut="log()")
public void doAfterReturning(Object object){
    logger.info("reponse={}",object.toString());
}
 

猜你喜欢

转载自www.cnblogs.com/404code/p/10569164.html