最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis日志模塊的適配器模式詳解

 更新時間:2022年08月09日 14:56:51   作者:周杰倫本人???????  
這篇文章主要介紹了Mybatis日志模塊的適配器模式詳解,,mybatis用了適配器模式來兼容這些框架,適配器模式就是通過組合的方式,將需要適配的類轉為使用者能夠使用的接口

Mybatis的日志模塊的適配器模式

我們在開發(fā)中日志是必不可少的一部分,而市場中有很多日志框架供我們使用,mybatis作為一個開源框架需要兼容這些框架,mybatis用了適配器模式來兼容這些框架,適配器模式就是通過組合的方式,將需要適配的類轉為使用者能夠使用的接口

下面咱們分析一下mybatis的日志模塊

mybatis定義了自己的Log接口

Log接口

public interface Log {
  boolean isDebugEnabled();
  boolean isTraceEnabled();
  void error(String s, Throwable e);
  void error(String s);
  void debug(String s);
  void trace(String s);
  void warn(String s);
}

這里定義了一些常用的方法

LogFactory的靜態(tài)代碼塊加載對應是日志適配器:

日志工廠類LogFactory

    static {
        tryImplementation(LogFactory::useSlf4jLogging);
        tryImplementation(LogFactory::useCommonsLogging);
        tryImplementation(LogFactory::useLog4J2Logging);
        tryImplementation(LogFactory::useLog4JLogging);
        tryImplementation(LogFactory::useJdkLogging);
        tryImplementation(LogFactory::useNoLogging);
    }
    private static void tryImplementation(Runnable runnable) {
        if (logConstructor == null) {
            try {
                runnable.run();
            } catch (Throwable t) {
                // ignore
            }
        }
    }
    public static synchronized void useLog4JLogging() {
        setImplementation(org.apache.ibatis.logging.log4j.Log4jImpl.class);
    }

當logConstructor用來記錄日志適配器的構造方法,當logConstructor不為空的時候就不再加載其他的日志適配器了。

分析一下setImplementation()方法:

private static void setImplementation(Class<? extends Log> implClass) {
        try {
            Constructor<? extends Log> candidate = implClass.getConstructor(String.class);
            Log log = candidate.newInstance(LogFactory.class.getName());
            if (log.isDebugEnabled()) {
                log.debug("Logging initialized using '" + implClass + "' adapter.");
            }
            logConstructor = candidate;
        } catch (Throwable t) {
            throw new LogException("Error setting Log implementation.  Cause: " + t, t);
        }
    }
  • 獲取適配器的構造方法
  • 然后獲取這個適配器的實例,如果獲取成功,把它的構造方法記錄在logConstructor中,否則就會拋出異常

下面就分析一下Log4jImpl類:

Log接口的實現類

public class Log4jImpl implements Log {
  private static final String FQCN = Log4jImpl.class.getName();
  private final Logger log;
  public Log4jImpl(String clazz) {
    log = Logger.getLogger(clazz);
  }

  @Override
  public boolean isDebugEnabled() {
    return log.isDebugEnabled();
  }

  @Override
  public boolean isTraceEnabled() {
    return log.isTraceEnabled();
  }

  @Override
  public void error(String s, Throwable e) {
    log.log(FQCN, Level.ERROR, s, e);
  }

  @Override
  public void error(String s) {
    log.log(FQCN, Level.ERROR, s, null);
  }

  @Override
  public void debug(String s) {
    log.log(FQCN, Level.DEBUG, s, null);
  }

  @Override
  public void trace(String s) {
    log.log(FQCN, Level.TRACE, s, null);
  }

  @Override
  public void warn(String s) {
    log.log(FQCN, Level.WARN, s, null);
  }

}

Log4jImpl是一個適配器類,它實現了Mybatis自定義的Log接口,它的成員變量Logger是log4j里的類,我們要做的是調用Log接口的方法就可以使用log4j,Logger是需要我們適配的類,因此我們在實現Log接口的方法的時候調用Logger中的方法來完成適配,這就是適配器模式的實現

總結

Mybatis日志模塊用到了適配器模式,Log接口是目標接口,Logger等各種日志框架的類是需要我們適配的類,而是適配器是Log4jImpl、Slf4jImpl等適配類

到此這篇關于Mybatis日志模塊的適配器模式詳解的文章就介紹到這了,更多相關Mybatis適配器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Mybatis 如何批量刪除數據的實現示例

    Mybatis 如何批量刪除數據的實現示例

    這篇文章主要介紹了Mybatis 如何批量刪除數據的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 學java得這樣學,學習確實也得這樣

    學java得這樣學,學習確實也得這樣

    學java得這樣學,學習東西確實也得這樣
    2008-02-02
  • 淺析Java中如何優(yōu)雅地處理null值

    淺析Java中如何優(yōu)雅地處理null值

    這篇文章主要為大家詳細介紹了如何結合 Lambda 表達式和 Optional,讓 Java 更優(yōu)雅地處理 null 值,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-04-04
  • Java數據結構中堆的向下和向上調整解析

    Java數據結構中堆的向下和向上調整解析

    堆是一顆完全二叉樹,在這棵樹中,所有父節(jié)點都滿足大于等于其子節(jié)點的堆叫大根堆,所有父節(jié)點都滿足小于等于其子節(jié)點的堆叫小根堆。堆雖然是一顆樹,但是通常存放在一個數組中,父節(jié)點和孩子節(jié)點的父子關系通過數組下標來確定
    2021-11-11
  • Java實現的Windows資源管理器實例

    Java實現的Windows資源管理器實例

    這篇文章主要介紹了Java實現的Windows資源管理器,實例分析了基于java實現windows資源管理器的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 關于Jedis的用法以及Jedis使用Redis事務

    關于Jedis的用法以及Jedis使用Redis事務

    這篇文章主要介紹了關于Jedis的用法以及Jedis使用Redis事務問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • JAVA中Collections.sort()方法使用詳解

    JAVA中Collections.sort()方法使用詳解

    這篇文章主要給大家介紹了關于JAVA中Collections.sort()方法使用的相關資料,Java中Collections.sort()方法是用來對List類型進行排序的,文中通過代碼將使用的方法介紹的非常詳細,需要的朋友可以參考下
    2024-05-05
  • 基于springboot實現一個簡單的aop實例

    基于springboot實現一個簡單的aop實例

    這篇文章主要介紹了基于springboot實現一個簡單的aop,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • Java實現斗地主的發(fā)牌功能

    Java實現斗地主的發(fā)牌功能

    這篇文章主要為大家詳細介紹了Java實現斗地主的發(fā)牌功能,含按順序發(fā)牌和玩家牌排序顯示等功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 項目連接nacos配置中心報錯:Client not connected, current status:STARTING的解決方案

    項目連接nacos配置中心報錯:Client not connected, current

    這篇文章主要介紹了項目連接nacos配置中心報錯:Client not connected, current status:STARTING的解決方案,采用了mysql作為持久化的數據庫,docker作為運行的環(huán)境,感興趣的朋友跟隨小編一起看看吧
    2024-03-03

最新評論

昌平区| 托克逊县| 元朗区| 古蔺县| 博湖县| 阿拉尔市| 宁晋县| 霸州市| 保定市| 尖扎县| 普安县| 淮阳县| 横峰县| 敖汉旗| 惠来县| 安吉县| 墨竹工卡县| 白朗县| 灌云县| 保山市| 罗山县| 景洪市| 临猗县| 胶州市| 弥渡县| 嘉定区| 崇州市| 沙田区| 万荣县| 尉氏县| 宜州市| 丰原市| 安溪县| 雅安市| 华宁县| 高台县| 西贡区| 满城县| 石家庄市| 林甸县| 明水县|