首页 > 其他分享 >使用Spring AOP实现系统操作日志记录

使用Spring AOP实现系统操作日志记录

时间:2022-10-25 22:56:56浏览次数:63  
标签:连接点 Spring Aspect AOP 日志 执行

使用Spring AOP实现系统操作日志记录

一、什么是Spring

Spring 是一个广泛应用的J2EE框架,是针对bean的生命周期进行管理的轻量级容器,主要由Spring Core、Spring AOP、Spring ORM、Spring DAO、Spring Context、Spring Web、Spring Web MVC七大模块组成。

二、什么是AOP

AOP是Aspect Oriented Programming的缩写,是面向切面编程,针对业务处理过程中的切面进行提取,降低了耦合度,提高了可重用性,经常用于日志记录、性能统计、安全控制、事务处理、异常处理等。AOP分为静态代理和动态代理,常见的AOP实现有AspectJ,Spring AOP,其中Aspect是属于静态代理,Spring AOP是动态代理,Spring AOP实现又是采用的JDK动态代理和CGLib动态代理两种方式。

三、相关术语

Aspect: 切面,在Spring中使用@Aspect注解标识,该类封装一些具体的操作,例如记录日志。

Joinpoint: 连接点,是指的是在程序运行过程中的某个阶段。

Pointcut: 切入点,定义的一个或者一组方法,当程序执行到这些切入点时,会产生通知。

@Before: 前置通知,在连接点之前执行的通知,不能阻止连接点前的执行。

@AfterReturning: 在连接点正常完成后执行的通知,不抛出异常的情况。

@AfterThrowing: 和上方刚好补充,在连接点抛出异常是执行的通知。

@After: 在连接点退出时执行的通知。异常退出和正常退出都会执行。

@Around: 环绕通知,可以在方法前后加入自定义的操作,相当于环绕包围,并且可以决定方法是否执行。

四、代码实现

@Aspect
@Component
@Slf4j
public class SysLogAspect {

    /**
     * Controller层切点,SysLog是自定义的注解
     */
    @Pointcut("@annotation(com.xxx.xxx.SysLog)")
    public void SysLogPointAspect() {
    }


    /**
     * @Description 环绕通知  用于拦截Controller层记录用户的操作
     */
    @Around("SysLogPointAspect()")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        //*========控制台输出=========*//
        log.info("==============访问请求==============\n");
      
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
       
        String requireType = request.getMethod();
        String requireUrl = request.getRequestURI();

        // 获取注解信息
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod();
        SysLog syslog = method.getAnnotation(SysLog.class);

        //*========数据库日志=========*//
        // 保存日志到数据库.....
      
      	// 方法执行开始
        long beginTime = System.currentTimeMillis();

        //执行方法
        Object result = joinPoint.proceed();

        //执行时长(毫秒)
        long execTime = System.currentTimeMillis() - beginTime;
        return result;
    }
}

原文链接:https://monkey.blog.xpyvip.top/archives/shi-yong-springaop-shi-xian-xi-tong-cao-zuo-ri-zhi-ji-lu

标签:连接点,Spring,Aspect,AOP,日志,执行
From: https://www.cnblogs.com/aibianchengya/p/16808161.html

相关文章

  • SpringBoot整合Swagger3
    1、导入相关依赖<!--swagger--><dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version></depen......
  • Spring基础使用四
    Spring基础使用四FactoryBean概念:FactoryBean是一个接口,需要创建一个类实现该接口其中有三个方法:getObject():通过一个对象交给IOC容器处理getObjectType():设置......
  • SpringBoot整合Freemarker实现页面静态化
    第一步:创建项目添加依赖:<!--web和actuator(图形监控用)基本上都是一起出现的--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-......
  • 【springboot】静态方法从用户协议头获取信息
     publicstaticIntegergetUid(){HttpServletRequestrequest=((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();......
  • ELK 不香了?试试接入这款更轻量的日志框架,真的很省心!
    当我们公司内部部署很多服务以及测试、正式环境的时候,查看日志就变成了一个非常刚需的需求了。是多个环境的日志统一收集,然后使用Nginx对外提供服务,还是使用专用的日志收......
  • grafana Loki 轻量级日志收集系统
    部署dockerrun-dti-p3000:3000grafana/grafana:masterdockerrun-dti-p3100:3100--nameloki grafana/loki:2.4.1 dockerrun-dti--namepromtailgrafa......
  • SpringCloud(一) - Dubbo + Zookeeper
    Dubbo和Zookeeper不是SpringCloud的东西,放在这里只是为了方便复习;1、下载安装Zookeeper和Dubbo1.1下载安装教程下载安装教程windows环境下安装zookeeper教程详解(单......
  • MySQL 通用查询日志与慢查询日志
    MySQL中的日志包括:错误日志、二进制日志、通用查询日志、慢查询日志等等。这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志。1)通用查询日志:记录建立的客户端连接......
  • Springboot中@Value的使用详解
    Springboot中@Value的使用详解Springboot通过@Value注解将配置文件中的属性注入到容器内组件中(可用在@Controller、@Service、@Configuration、@Component等Spring托管的......
  • SpringBoot2配置HikariCP连接池的密码保护
    本文讨论如何保护SpringBoot配置文件中的数据库连接信息,一般情况下application.properties里会如下配置DataSource:spring.datasource.driver-class-name=com.mysql.cj.jdbc.......