美文网首页spring boot
Spring Boot如何利用AOP巧妙记录操作日志?

Spring Boot如何利用AOP巧妙记录操作日志?

作者: 让我来处理高并发 | 来源:发表于2021-01-07 13:48 被阅读0次

    本篇要点

    简要回顾SpringAOP的相关知识点:关键术语,通知类型,切入点表达式等等。

    介绍SpringBoot快速启动测试AOP,巧妙打印日志信息。

    简单回顾SpringAOP的相关知识点

    SpringAOP的相关的知识点包括源码解析,为了加深印象,这边再做一个简短的回顾:

    1、AOP关键术语

    切面(Aspect):也就是我们定义的专注于提供辅助功能的模块,比如安全管理,日志信息等。

    连接点(JoinPoint):切面代码可以通过连接点切入到正常业务之中,图中每个方法的每个点都是连接点。

    切入点(PointCut):一个切面不需要通知所有的连接点,而在连接点的基础之上增加切入的规则,选择需要增强的点,最终真正通知的点就是切入点。

    通知方法(Advice):就是切面需要执行的工作,主要有五种通知:before,after,afterReturning,afterThrowing,around。

    织入(Weaving):将切面应用到目标对象并创建代理对象的过程,SpringAOP选择再目标对象的运行期动态创建代理对

    引入(introduction):在不修改代码的前提下,引入可以在运行期为类动态地添加方法或字段。

    2、通知的五种类型

    前置通知Before:目标方法调用之前执行的通知。

    后置通知After:目标方法完成之后,无论如何都会执行的通知。

    返回通知AfterReturning:目标方法成功之后调用的通知。

    异常通知AfterThrowing:目标方法抛出异常之后调用的通知。

    环绕通知Around:可以看作前面四种通知的综合。

    3、切入点表达式

    上面提到:连接点增加切入规则就相当于定义了切入点,当然切入点表达式分为很多种,这里主要学习execution和annotation表达式。

    execution

    写法:execution(访问修饰符 返回值 包名.包名……类名.方法名(参数列表))

    例:execution(public void com.smday.service.impl.AccountServiceImpl.saveAccount())

    访问修饰符可以省略,返回值可以使用通配符*匹配。

    包名也可以使用*匹配,数量代表包的层级,当前包可以使用..标识,例如* *..AccountServiceImpl.saveAccount()

    类名和方法名也都可以使用*匹配:* *..*.*()

    参数列表使用..可以标识有无参数均可,且参数可为任意类型。

    全通配写法:* *…*.*(…)

    通常情况下,切入点应当设置在业务层实现类下的所有方法:* com.smday.service.impl.*.*(..)。

    @annotation

    匹配连接点被它参数指定的Annotation注解的方法。也就是说,所有被指定注解标注的方法都将匹配。

    @annotation(com.hyh.annotation.Log):指定Log注解方法的连接点。

    4、AOP应用场景

    记录日志

    监控性能

    权限控制

    事务管理

    快速开始

    引入依赖

    如果你使用的是SpringBoot,那么只需要引入:spring-boot-starter-aop,框架已经将spring-aop和aspectjweaver整合进去。

    定义日志信息封装

    自定义注解@Log

    定义测试接口

    定义切面Aspect与切点Pointcut

    用@Aspect注解标注标识切面,用@PointCut定义切点。

    定义通知方法Advice

    这里使用环绕通知,

    这里处理webLog的方式有很多种,考虑性能,可以采用异步方式存入数据库,相应代码已经上传至Gitee。

    测试

    结果如下:

    原文链接:https://www.cnblogs.com/summerday152/p/13994673.html

    如果觉得本文对你有帮助,可以转发关注支持一下

    相关文章

      网友评论

        本文标题:Spring Boot如何利用AOP巧妙记录操作日志?

        本文链接:https://www.haomeiwen.com/subject/larzoktx.html