图灵学院 java架构师学习路线:Mybatis中单例模式的介绍
单例模式:单例模式可确保某个类只有一个实例,并且实例化自己并将该实例提供给整个系统。此类称为单例类,该类提供全局访问方法。
单例模式的三个要点:一是一类只能有一个实例。另一个是它必须自己创建此实例;第三,它必须自己将此实例提供给整个系统。单例模式是对象创建模式。单例模式也是列表模式或单状态模式。
Mybatis中有两个地方可以使用单例模式模式:ErrorContext和LogFactory,其中ErrorContext是每个线程中用来记录该线程的执行环境错误信息的单个实例,LogFactory提供给整个Mybatis。使用的日志工厂用于获取为项目配置的日志对象。设计模式的单例模式的实践,本文建议您阅读。
ErrorContext的单例实现代码:
publicclassErrorContext{
privatestaticfinalThreadLocal
privateErrorContext(){
}
publicstaticErrorContextinstance(){
ErrorContextcontext=LOCAL.get();
if(context==null){
context=newErrorContext();
LOCAL.set(context);
}
returncontext;
}
构造函数是private修饰,具有一个static的局部instance变量和一个获取instance变量的方法,在获取实例的方法中,先判断是否为空如果是的话就先创建,然后返回构造好的对象。
只是这里有个有趣的地方是,LOCAL的静态实例变量使用了ThreadLocal修饰,也就是说它属于每个线程各自的数据,而在instance()方法中,先获取本线程的该实例,如果没有就创建该线程独有的ErrorContext。