mybatis面试点|mybatis中VFS单例模式的使用

Published on with 118 views

开头说两句

java学习公众号: 程序员学习大本营
小刀博客: https://www.lixiang.red

学习背景

最近我一直在想,看源码时,到底是看什么,无非是看这个功能是怎么实现的,这就要看有哪些类,这些类都是做什么用的,在组织类方面,大多数源码都会仿照设计模式来做,一些特有的后缀名如:XXXFactory , XXXBuilder , 像这种我们应该一看就知道是怎么提供功能支持的. 然后我们还要知道Mybatis 提供了哪些功能.如连接池, mybatis是用的自己的连接池,还是提供接口然后用第三方的连接池?

学习方法

以前小刀在学习源码时,会钻入一个牛角尖,就是跟着方法点着点着,就点晕了.现在想想这些都要源码+debug一起来看,而且debug小刀的建议是不要debug源码,最好是用springboot的工程去debug引入的jar包. 然后对照着看源码. 这样可以更好的根我们的实际运行环境相结合.如上面的问题. 我们都知道springboot 现在默认用的是hikari 连接池,那两者是怎么结合起来的呢? 单独看源码真得是很没意思,希望这样结合springbbot实际运行的工程去学习,能更好的弄懂我们平时用的东西里面的原理.

资源模块用到的单例模式

Mybatis中使用VFS表示虚拟文件系统,用来查找指定路径下的资源,VFS是一个抽象类,我们可以看到官方提供了JBoss6VFS和DefaultVFS两个实现,具体哪个实现,就要我们通过springboot应用debug了
image.png
而且通过日志我们可以发现,最后用的都不是这两种,而是SpringbootVFS
image.png

单例模式的实现

通常来说,单例模式有四种实现方式,饿汉,懒汉,多线程下的懒汉,静态内部类这四种方式
饿汉:

private static final Single single = new Single();

public static Single singleInstance(){
	return single;	
}

懒汉:

private static Single single = null;
public static Single singleInstance(){
	if(null == single){
		single = new Single();
	}
	return single;
}

多线程下安全的懒汉:

private static volatile Single single = null;

public static Single singleInstance(){
	if(null == single){
		synchronized(Single.clss){
			single = new Single();
		}
	}
	return single;
}

静态内部类方式:
mybatis就是用的这种方式,如下图所示:
image.png

最后说两句

大家在学习过程中有什么问题,欢迎随时留言和小刀交流


标题:mybatis面试点|mybatis中VFS单例模式的使用
作者:xiaodaojava
地址:https://www.lixiang.red/articles/2019/10/02/1570012498784.html

Responses