【八】mybatis 日志模块设计

mybatis 日志模块设计

**简介:**闲来无事阅读一下mybatis的日志模块设计,学习一下优秀开源框架的设计思路,提升自己的编码能力

模块设计

在Mybatis内部定义了4个级别:Error:错误 、warn:警告、debug:调试、trance,日志优先级如下:

error>warn>debug>trance

实现原理

如下图可以看到mybatis日志模块的源码结构图:

mybatis通过适配器模式实现了:commos、jdbc、log4j、slf4j、stdout,日志

这里我们想知道mybatis怎么去加载日志实现类的,首先我们看到日志工厂类LogFactory:

1、使用Static 方法在类进行初始化的时候去尝试加载对应的实现类

2、优先级为:slf4j>commonLog>log4j2>log4j>jdk>noLog

3、当获取到的实现类不为空时候则不进行加载了

这里我们需要关注一下setImplementation方法

该方法实现了通过传入一个class类型,再通过newInstance来使用代理加载这个类型,如果引入了该jar包,就可以成功加载并创建对象,再赋值给logConstructor,这样就实现了日志实现类加载了。

到此我们还需要思考一个问题,日志实现类怎么去查询是否引入了jar包,这里我们以Log4j2Impl为例,打开Log4j2Impl类,我们看到Log4j2Impl的构造方法:

这里我们就明白了日志实现类怎么去查询是否引入了jar包了。

**总结:**到此mybatis日志模块设计就算讲清楚了,闲来无事阅读一下,该模块源码设计比较清晰明朗,大家有兴趣也可以去阅读一下,另外提一下日志工厂类LogFactory采用了单例模式,这个小模块作者使用了三个设计模式:单例模式、适配器模式、工厂模式,大家平时项目研发中也可以参考,希望本文能给阅读者有参考的意义。

相关推荐
马尔代夫哈哈哈3 小时前
MyBatis 入门与实战:从配置到CRUD一站式指南
mybatis
Jul1en_4 小时前
【MyBatis/plus】核心配置、插件与 MyBatis-Plus 构造器 Wrapper
mybatis
LiZhen7986 小时前
SpringBoot 实现动态切换数据源
java·spring boot·mybatis
我是Superman丶7 小时前
在 PostgreSQL 中使用 JSONB 类型并结合 MyBatis-Plus 实现自动注入,主要有以下几种方案
数据库·postgresql·mybatis
Pluto_CSND8 小时前
基于mybatis-generator插件生成指定数据表的实体类、xml文件和dao层接口
mybatis
indexsunny10 小时前
互联网大厂Java面试实战:微服务与Spring生态技术解析
java·spring boot·redis·kafka·mybatis·hibernate·microservices
手握风云-11 小时前
JavaEE 进阶第十六期:MyBatis,查询请求的生命周期全景图(一)
java·java-ee·mybatis
独断万古他化12 小时前
【SSM开发实战:博客系统】(二)JWT 登录流程、拦截器实现和用户信息接口落地
spring boot·spring·mybatis·博客系统·项目
Pluto_CSND13 小时前
MyBatis 的 XML 文件中特殊字符的处理
mybatis
独断万古他化13 小时前
【SSM开发实战:博客系统】(一)项目初始化与基础功能实现
spring boot·spring·mybatis·博客系统·项目