在使用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...