• 金正恩与特朗普会面 特朗普向金正恩竖起大拇指 2019-01-27
  • 2018月球与行星科学国际学术研讨会开幕 2019-01-27
  • 安徽省快3历史开奖结果:何苦 最后的棒棒_MyBatis源码解析之日志记录

    上海快三 www.kknq.net

    一 .概述

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

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

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

    二.设计模式

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

    日志??槔嗤?/strong>

    代理模式

    三.MyBatis源码日志实现

    1.MyBatis整合各方日志组件

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

    2.jdbc日志增强???/h2>

    链接阶段::

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

    并且调用了

    PreparedStatementLogger来创建代理对象。

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

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

    并且调用了ResultSet。Logger来创建代理对象,

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

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

    总结:

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

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

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

    当前文章://www.kknq.net/9oog29p0e/27b979_203650.html

    发布时间:2018-12-14 02:52:22


  • 金正恩与特朗普会面 特朗普向金正恩竖起大拇指 2019-01-27
  • 2018月球与行星科学国际学术研讨会开幕 2019-01-27