作者:mobiledu2502924733 | 来源:互联网 | 2024-10-10 19:42
目录定义特点源码实例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 ( ) { ErrorContext 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 { private LogFactory ( ) { } public static Log getLog ( Class< ? > aClass) { return getLog ( aClass. getName ( ) ) ; } public static Log getLog ( String logger) { try { return logConstructor. newInstance ( new Object [ ] { logger } ) ; } catch ( Throwable t) { throw new LogException ( "Error creating logger for logger " &#43; logger &#43; ". Cause: " &#43; t, t) ; } } }