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

本贴最后更新于 1776 天前,其中的信息可能已经时移世易

开头说两句

Java 基础 Demo 站: https://www.javastudy.cloud
Java 中高级开发博客: https://www.lixiang.red
Java 学习公众号: java 技术大本营
java 技术大本营

学习背景

最近我一直在想,看源码时,到底是看什么,无非是看这个功能是怎么实现的,这就要看有哪些类,这些类都是做什么用的,在组织类方面,大多数源码都会仿照设计模式来做,一些特有的后缀名如: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 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 387 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...