zoukankan      html  css  js  c++  java
  • 七、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());
    }
     
  • 相关阅读:
    Eclipse编辑JS响应慢,复制粘贴卡顿的解决方案
    Oracle 通过字段名查询其所在的表
    spring mvc流转控制说明
    Iterable(迭代器)的用法
    spring事务配置详解
    创建第一个Hiberntae工程
    spring3.0注解
    Ext中Grid重新load设置URL
    spring框架设计理念(上)
    Eclipse快捷键大全
  • 原文地址:https://www.cnblogs.com/404code/p/10569164.html
Copyright © 2011-2022 走看看