Mybatis日誌原始碼分析

2021-10-06 21:02:08 字數 2016 閱讀 2761

在使用mybatis的時候,可以看到控制台的日誌輸出。有很多的日誌框架,那麼mybatis如何與這些日誌框架進行整合呢?優先順序又如何確定?日誌資訊如何優雅的輸出?

使用介面進行標準統一。

public

inte***ce

log

每個日誌的實現都提供對應的介面卡,以log4j為例:

將第三方的日誌介面轉換為mybatis規定的統一日誌介面

public

class

log4jimpl

implements

log@override

public

boolean

isdebugenabled()

@override

public

boolean

istraceenabled()

@override

public

void

error

(string s, throwable e)

@override

public

void

error

(string s)

@override

public

void

debug

(string s)

@override

public

void

trace

(string s)

@override

public

void

warn

(string s)

}

按順序載入:

static

工廠類中儲存對應的日誌的construct物件

private

static

void

setimplementation

(class<

?extends

log> implclass)

logconstructor = candidate;

}catch

(throwable t)

}

為了將業務與日誌進行解耦,採取動態**模式,以connectionlogger為例:

public object invoke

(object proxy, method method, object[

] params)

throws throwable

/** * preparedstatment: connection.preparestatement(sql);

* connection.preparecall(sql);

*/if(

"preparestatement"

.equals

(method.

getname()

)||"preparecall"

.equals

(method.

getname()

))preparedstatement stmt =

(preparedstatement) method.

invoke

(connection, params)

; stmt = preparedstatementlogger.

newinstance

(stmt, statementlog, querystack)

;return stmt;

}elseif(

"createstatement"

.equals

(method.

getname()

))else

}catch

(throwable t)

}

Mybatis 原始碼分析

mybatis解析 2 sqlsessionfactorybean 繼承了 initializingbean 介面,在bean解析的finishbeanfactoryinitialization 的方法對 initializingbean介面中的 afterpropertiesset 方法進行呼叫,...

Mybatis原始碼分析

我們都知道mybatis它是一款優秀的持久層框架,它支援定製化sql 儲存過程以及高階對映,幫我們節省了許多時間與精力,今天我們主要來對mybatis的底層原始碼進行分析,主要是以下4行 首先呼叫resources中的單個string引數的getresuorceasstream string res...

MyBatis 原始碼分析

sqlsession inte ce,代表乙個連線資料庫的會話,提供了乙個預設的 defaultsqlsession sqlsessionfactory inte ct,建立 sqlsessionfactory 的工廠,提供了預設的 defaultsqlsessionfactory建立 defaul...