热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Mybatis源码单例模式详解

目录定义特点源码实例1.获取ErrorContext实例2.获取org.slf4j.Logger实例对象定义单例模式(SingletonPattern):单例模式确


目录

  • 定义
  • 特点
  • 源码实例
    • 1. 获取ErrorContext实例
    • 2.获取org.slf4j.Logger 实例对象


定义

单例模式(Singleton Pattern):单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。


特点

1、一是某个类只能有一个实例;
2、二是它必须自行创建这个实例;
3、三是它必须自行向整个系统提供这个实例。
4、单例模式是一种对象创建型模式。
5、单例模式又名单件模式或单态模式。


源码实例

在Mybatis中有两个地方用到单例模式,ErrorContext和LogFactory,其中ErrorContext是用在每个线程范围内的单例,用于记录该线程的执行环境错误信息,而LogFactory则是提供给整个Mybatis使用的日志工厂,用于获得针对项目配置好的日志对象。


1. 获取ErrorContext实例

ErrorContext是用在每个线程范围内的单例,用于记录该线程的执行环境错误信息。

代码片段

public class ErrorContext {private static final ThreadLocal<ErrorContext> LOCAL &#61; new ThreadLocal<>();private ErrorContext() {}public static ErrorContext instance() {//先获取本线程的该实例,如果没有就创建该线程独有的ErrorContextErrorContext context &#61; LOCAL.get();if (context &#61;&#61; null) {context &#61; new ErrorContext();LOCAL.set(context);}return context;}
}

2.获取org.slf4j.Logger 实例对象

LogFactory没有实现获取自身的方式,只是当成一个提供日志打印的工具。

代码片段

public final class LogFactory {//单例模式&#xff0c;不得自己new实例private LogFactory() {// disable construction}//根据传入的类来构建Logpublic static Log getLog(Class<?> aClass) {return getLog(aClass.getName());}//根据传入的类名来构建Logpublic static Log getLog(String logger) {try {//构造函数&#xff0c;参数必须是一个&#xff0c;为String型&#xff0c;指明logger的名称return logConstructor.newInstance(new Object[] { logger });} catch (Throwable t) {throw new LogException("Error creating logger for logger " &#43; logger &#43; ". Cause: " &#43; t, t);}}
}

推荐阅读
author-avatar
mobiledu2502924733
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有