一张思维导图带你学会SpringBoot使用AOP实现日志管理功能

这篇具有很好参考价值的文章主要介绍了一张思维导图带你学会SpringBoot使用AOP实现日志管理功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🧑‍💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。
📖所属专栏:SpringBoot实战


系列文章目录

标题
一文带你学会使用SpringBoot+Avue实现短信通知功能(含重要文件代码)
一张思维导图带你学会Springboot创建全局异常、自定义异常
一张思维导图带你打通SpringBoot自定义拦截器的思路
28个SpringBoot项目中常用注解,日常开发、求职面试不再懵圈
一张思维导图带你学会SpringBoot、Vue前后端分离项目线上部署
一张思维导图带你学会使用SpringBoot中的Schedule定时发送邮件
一张思维导图带你学会使用SpringBoot异步任务实现下单校验库存

一张思维导图带你学会SpringBoot使用AOP实现日志管理功能,SpringBoot实战,spring boot,java,后端


思维导图

一张思维导图带你学会SpringBoot使用AOP实现日志管理功能,SpringBoot实战,spring boot,java,后端

🌟AOP介绍

基本概念:在不改变原有功能的逻辑,增加新的功能。
应用场景

  • 权限控制
  • 日志处理
  • 事务控制

下面以对产品数据增删改查功能,进行日志管理功能为例,对AOP中的核心概念作出介绍,请参考下表

概念 解析 对应日志管理功能
核心关注点 业务逻辑的主要功能,应用程序主要关注的部分 产品数据的增删改查
横切关注点 与核心关注点相关但不属于核心关注点的功能,在系统的多个模块或组件中散布 记录产品操作的日志
通知 在特定切入点执行时要执行的代码,实现横切关注点的具体逻辑。可以在目标方法执行之前、之后或抛出异常时执行 执行记录日志的代码
连接点 可以插入通知的特定点,通常是方法执行的位置 产品表操作的方法
切入点 通过表达式或规则定义的连接点的集合。确定了哪些连接点与通知关联起来 选择所有的插入、更新或删除操作的连接点集合
切面 横切关注点和通知的组合,将通知应用到切入点匹配的连接点上 包含记录日志的通知和定义切入点的规则
目标 被通知的对象或类,即应用程序中执行具体操作的对象或方法 对产品数据作出操作的对象或方法
织入 将切面应用到目标对象上,创建新的代理对象的过程。可以在编译时、加载时或运行时进行 将日志管理切面应用到产品表操作的目标对象上,以记录日志

🌟具体实现步骤

数据准备

创建产品表、以及日志表,并向产品表添加相关数据。

CREATE TABLE `product`  (
  `id` int(11) NOT NULL,
  `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `price` decimal(10, 2) NULL DEFAULT NULL,
  `stock` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
-- ----------------------------
-- Records of product
-- ----------------------------
INSERT INTO `product` VALUES (1, '苹果13', 10.99, 50);
INSERT INTO `product` VALUES (2, '小米10', 19.99, 99);
INSERT INTO `product` VALUES (3, '华为mate20', 5.99, 19);

CREATE TABLE `log`  (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `operation` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `data` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `operate_time` datetime NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

引入相关依赖

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

创建实体类

Product类

public class Product implements Serializable {
    private Integer id;
    private String name;
    private BigDecimal price;
    private Integer stock;
}

Log类

public class Log implements Serializable {
    private Integer id;
    private String operation;
    private String data;
    private Timestamp operateTime;
}

自定义注解@LogTip

自定义注解,用于标记记录日志的方法。

@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogTip {

    String value() default "";

}

定义切面类

切面类由切点PointCut+通知Advice共同构成。有关于通知的类型以及解释,可以查看思维导图中的通知节点。有关于JoinPoint的API见下表

API 描述
getSignature() 获取连接点的签名,返回一个MethodSignature对象
getArgs() 获取连接点方法的参数数组
getTarget() 获取目标对象
getThis() 获取当前代理对象
toShortString() 生成连接点的简短描述
toLongString() 生成连接点的详细描述
getStaticPart() 获取静态连接点部分
getKind() 获取连接点的类型
getSourceLocation() 获取连接点所在位置的源代码位置
@Component
@Aspect
public class LogAspect {
    @Autowired
    private LogMapper logMapper;
    @Pointcut("@annotation(com.shoanjen.redis.annotation.LogTip)")
    public void pointCut(){}

    @AfterReturning("pointCut()")
    public void getLogInfo(JoinPoint point) throws Throwable {
        // 获取方法参数列表
        Object[] args = point.getArgs();
        //获取自定义注解上的描述信息
        MethodSignature methodSignature= (MethodSignature) point.getSignature();
        Method method=methodSignature.getMethod();
        LogTip annotation=method.getAnnotation(LogTip.class);
        String desc=annotation.value();
        // 获取操作的数据
        String data = Arrays.toString(args);
        // 记录日志
        saveLog(desc, data);
    }
    private void saveLog(String desc, String data) {
        Log log = new Log();
        log.setOperation(desc);
        log.setData(data);
        log.setOperateTime(new Timestamp(System.currentTimeMillis()));
        logMapper.save(log);
    }
}

LogMapper

public interface LogMapper {
    void save(Log log);
}
<insert id="save" parameterType="com.shoanjen.redis.model.Log" keyColumn="id" keyProperty="id" useGeneratedKeys="true">
       INSERT INTO log(operation, data, operate_time) VALUES (#{operation}, #{data}, #{operateTime});
</insert>

ProductController

这里以上一篇文章一张思维导图带你学会使用SpringBoot异步任务实现下单校验库存中的产品下单功能为例子,对其记录日志。

@RestController
@RequestMapping("/api/v1/product")
public class ProductController {
    @Autowired
    private ProductService productService;

    @Autowired
    private ValidateTask validateTask;
    @LogTip("产品下单")
    @RequestMapping("order")
    public JsonData order(@RequestParam int productId,@RequestParam int quantity) throws ExecutionException, InterruptedException {
        Future<Boolean> validateResult=validateTask.validateStock(productId,quantity);
        System.out.println(validateResult.get());
        Boolean flag=false;
        //判断异步任务是否完成
        if (validateResult.isDone()){
            try {
                flag=validateResult.get();
            } catch (Exception e) {
                flag=false;
            }

        }
        if (flag){
            return JsonData.buildSuccess("下单成功");
        }else {
            return JsonData.buildError("下单失败,库存不足");
        }
    }
}

🌟最终测试

接口请求测试

一张思维导图带你学会SpringBoot使用AOP实现日志管理功能,SpringBoot实战,spring boot,java,后端
一张思维导图带你学会SpringBoot使用AOP实现日志管理功能,SpringBoot实战,spring boot,java,后端

日志表查看

一张思维导图带你学会SpringBoot使用AOP实现日志管理功能,SpringBoot实战,spring boot,java,后端

🌟写在最后

有关于SpringBoot使用AOP实现日志管理功能到此就结束了。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。


一张思维导图带你学会SpringBoot使用AOP实现日志管理功能,SpringBoot实战,spring boot,java,后端文章来源地址https://www.toymoban.com/news/detail-643441.html

到了这里,关于一张思维导图带你学会SpringBoot使用AOP实现日志管理功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 一张流程图带你学会SpringBoot结合JWT实现登录功能

    一张流程图带你学会SpringBoot结合JWT实现登录功能

    🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:SpringBoot实战 JWT(JsonWebToken)是 一种轻量级的跨域身份验证解决方案 。通常被用于无状态身份验证机制,将用户信息签名

    2024年02月11日
    浏览(9)
  • 一张图带你学会入门级别的SpringBoot实现文件上传、下载功能

    一张图带你学会入门级别的SpringBoot实现文件上传、下载功能

    🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:SpringBoot实战 标题 一文带你学会使用SpringBoot+Avue实现短信通知功能(含重要文件代码) 一张思维导图带你学会Springboot创

    2024年02月12日
    浏览(14)
  • 一张思维导图带你打通SpringBoot自定义拦截器的思路

    一张思维导图带你打通SpringBoot自定义拦截器的思路

    🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:SpringBoot实战 在开发中,都离不开拦截器的使用。比如说在开发登录功能时,采用JWT登录时通过对token进行验证实现登

    2024年02月14日
    浏览(7)
  • springboot使用aop排除某些方法,更新从另外一张表,从另外一张表批量插入

    在Spring Boot中使用AOP时,如果想要排除某些方法不被切面所影响,可以通过使用切面表达式中的!within来实现。以下是一个示例: 在上面的示例中,@Before注解用于定义切面的beforeAdvice方法。execution(* com.example.service. . (…))表示切入所有com.example.service包下的方法。而!wit

    2024年02月13日
    浏览(8)
  • 使用SpringBoot AOP记录操作日志和异常日志

    使用SpringBoot AOP记录操作日志和异常日志

    平时我们在做项目时经常需要对一些重要功能操作记录日志,方便以后跟踪是谁在操作此功能;我们在操作某些功 能时也有可能会发生异常,但是每次发生异常要定位原因我们都要到服务器去查询日志才能找到,而且也不能对发 生的异常进行统计,从而改进我们的项目,要

    2024年02月04日
    浏览(7)
  • Springboot整合AOP实现日志的保存

    Springboot整合AOP实现日志的保存

    1.定义注解 2.编写切面的实现 3.测试

    2024年02月09日
    浏览(11)
  • 1、springboot中使用AOP切面完成全局日志

    1、springboot中使用AOP切面完成全局日志 可选择在控制台输出日志或者收集日志信息存储进数据库中 1、在配置 AOP 切面之前,我们需要了解下 aspectj 相关注解的作用: @Aspect :作用是把当前类标识为一个切面、供容器读取 @Pointcut :(哪些方法或者类需要进行AOP织入)定义一个

    2024年02月02日
    浏览(3)
  • 使用Spring Boot AOP实现日志记录

    使用Spring Boot AOP实现日志记录

    目录 介绍 1.1 什么是AOP 1.2 AOP体系与概念 AOP简单实现 2.1 新建一个SpringBoot项目,无需选择依赖 2.2 设置好本地Maven配置后,在pom.xml文件里添加添加maven依赖 2.3 创建一个业务类接口 2.4 在实体类实现接口业务  2.5 在单元测试运行结果 2.6 创建切面类 2.7 再次运行测试  总结 1.

    2024年02月14日
    浏览(8)
  • java思维导图 - -13张思维导图带你快速入门 --

    java思维导图 - -13张思维导图带你快速入门 --

    java!!!!!!!!! 13张思维导图带你快速入门 --满满干货(建议收藏) –怒肝一周,只求一赞!!! 囊括了java大部分的知识点,今天分享给大家,希望能帮助到各位友友! 分为电脑端和手机端! 手机端隐藏了部分分支,便于观看 电脑端是完整版,根据需求自行选择。

    2024年02月02日
    浏览(5)
  • Java使用Aop实现用户操作日志记录(新手入门)

    Java使用Aop实现用户操作日志记录(新手入门)

    导入打印日志,aop,hutool,的依赖,Hutool是一个Java工具包,里面封装了大量的常用工具类,到时候咱们就通过这个工具包中有一个工具类可以用来获取客户端IP地址。 自定义操作类型枚举类 因为基本是增删改查四个方法 自定义用来记录用户操作日志的注解 写一个方法加上我

    2024年02月06日
    浏览(4)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包