MyBatis源码分析之日志记录详解

所属分类: 软件编程 / java 阅读数: 32
收藏 0 赞 0 分享

一 .概述

MyBatis没有提供日志的实现类,需要接入第三方的日志组件,但第三方日志组件都有各自的Log级别,且各不相同,但MyBatis统一提供了trace、debug、warn、error四个级别;

自动扫描日志实现,并且第三方日志插件加载优先级如下:slf4J → commonsLoging → Log4J2 → Log4J → JdkLog;

日志的使用要优雅的嵌入到主体功能中;

二.设计模式

将各种日志组件如(slf4J ,commonsLoging ,Log4J2 , Log4J , JdkLog)统一输出,定义了trace、debug、warn、error四个级别;

日志模块类图

代理模式

三.MyBatis源码日志实现

1.MyBatis整合各方日志组件

容器启动时,按照日志组件优先级 slf4J → commonsLoging → Log4J2 → Log4J → JdkLog进行 加载,每个日志主键都做了了适配器的实现类

2.jdbc日志增强模块

链接阶段:

实现了InvocationHandler接口是一个代理类,返回的是具有日志能力的Connection,同时打印了参数

并且调用了

PreparedStatementLogger来创建代理对象。

由此jdbc由链接阶段进入准备阶段:

PreparedStatementLogger实现了InvocationHandler接口是一个代理类,返回的是具有日志能力的ResultSet,同时打印了参数

并且调用了ResultSetLogger来创建代理对象,

由此jdbc由链接阶段进入执行阶段:

ResultSetLogger实现了InvocationHandler接口是一个代理类,返回的是具有日志能力的ResultSet,同时打印了具体的sql语句。传入参数,以及返回结果。

总结:

mybatis自身没有日志的实现通过适配器模式整合各日志厂商的日志组件,并统一了输出接口,并使用了代理模式,从链接,至编译,最后到执行阶段,进行层层代理,使日志优雅的嵌入到主体功能中;

举例:一个苹果从果树到消费者手中,果农—收购商—批发商—农贸市场—消费者,在该代理链中,消费者买苹果的价格不是某一个环节加价的,而是层层加价,同时消费者只需要在农贸市场买入苹果,而不必知道苹果如何进入农贸市场的。

对农贸市场也是如此。苹果到消费者手中共经过 收购商—批发商—农贸市场 3个代理商 ,每个代理商返回的都是加价过的代理对象,对消费者屏蔽了苹果来源。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

更多精彩内容其他人还在看

Spring Boot 配置 IDEA和DevTools 热部署的方法

这篇文章主要介绍了Spring Boot 配置 IDEA和DevTools 热部署的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

SpringBoot使用Redis缓存的实现方法

这篇文章主要介绍了SpringBoot使用Redis缓存的实现方法,需要的朋友可以参考下
收藏 0 赞 0 分享

SpringBoot中自定义参数绑定步骤详解

这篇文章主要介绍了SpringBoot中自定义参数绑定步骤详解,非常不错,具有参考借鉴价值 ,需要的朋友可以参考下
收藏 0 赞 0 分享

Java实现abc字符串排列组合

这篇文章主要为大家详细介绍了JAVA实现abc字符串的排列组合,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java中后台线程实例解析

这篇文章主要介绍了Java中后台线程实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

ehcache模糊批量移除缓存的方法

本篇文章主要介绍了ehcache模糊批量移除缓存的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Java多线程join方法实例代码

这篇文章主要介绍了Java多线程join方法实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java实现字符串排列组合问题

这篇文章主要为大家详细介绍了java实现字符串排列组合问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java排列组合字符串的方法

这篇文章主要介绍了Java排列组合字符串的方法
收藏 0 赞 0 分享

Java语言中的自定义类加载器实例解析

这篇文章主要介绍了Java语言中的自定义类加载器实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多