当前位置: 首页 > news >正文

【八】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采用了单例模式,这个小模块作者使用了三个设计模式:单例模式、适配器模式、工厂模式,大家平时项目研发中也可以参考,希望本文能给阅读者有参考的意义。

 

http://www.lryc.cn/news/103580.html

相关文章:

  • Python-如何使用正则表达式
  • 分解质因子,将一个不小于2的整数分解质因数,例如,输入90,则输出:90=2*3*3*5
  • C语言,vs各种报错分析(不断更新)
  • AR开发平台 | 探索AR技术在建筑设计中的创新应用与挑战
  • 小白到运维工程师自学之路 第六十集 (docker的概述与安装)
  • SpringBoot 集成 Elasticsearch
  • 【ES】使用日志记录
  • svn还原本地代码
  • zore-shot,迁移学习和多模态学习
  • 【Golang 接口自动化07】struct转map的三种方式
  • 华为数通HCIA-网络模型
  • 端口的解说
  • “深入了解Spring Boot: 快速构建微服务应用的利器“
  • 华为OD机试 Java 实现【批量处理任务】【2023 B卷 200分】,二分查找
  • C# 2的幂
  • linux vi指令大全
  • jdk8使用okhttp发送http2请求
  • virbr是什么设备
  • MyBatis缓存-提高检索效率的利器--二级缓存
  • 开心档之CSS !important 规则
  • 深入篇【C++】手搓模拟实现list类(详细剖析底层实现原理)模拟实现正反向迭代器【容器适配器模式】
  • OnTrigger的几种情况
  • 地产变革中,物业等风来
  • (五)springboot实战——springboot自定义事件的发布和订阅
  • AVFoudation - 音频测量
  • 学习记录——TransNormerLLM
  • 【Qt】利用Tool Button控件创建下拉菜单按钮
  • 1.2 eureka注册中心,完成服务注册
  • 【100天精通python】Day20:文件及目录操作_os模块和os.psth模块,文件权限修改
  • 回归预测 | MATLAB实现PSO-GPR粒子群优化高斯过程回归多输入单输出回归预测