开头说两句
Java 基础 Demo 站: https://www.javastudy.cloud
Java 中高级开发博客: https://www.lixiang.red
Java 学习公众号: java 技术大本营
学习背景
最近我一直在想,看源码时,到底是看什么,无非是看这个功能是怎么实现的,这就要看有哪些类,这些类都是做什么用的,在组织类方面,大多数源码都会仿照设计模式来做,一些特有的后缀名如:XXXFactory , XXXBuilder , 像这种我们应该一看就知道是怎么提供功能支持的. 然后我们还要知道 Mybatis 提供了哪些功能.如连接池, mybatis 是用的自己的连接池,还是提供接口然后用第三方的连接池?
学习方法
以前小刀在学习源码时,会钻入一个牛角尖,就是跟着方法点着点着,就点晕了.现在想想这些都要源码 +debug 一起来看,而且 debug 小刀的建议是不要 debug 源码,最好是用 springboot 的工程去 debug 引入的 jar 包. 然后对照着看源码. 这样可以更好的根我们的实际运行环境相结合.如上面的问题. 我们都知道 springboot 现在默认用的是 hikari 连接池,那两者是怎么结合起来的呢? 单独看源码真得是很没意思,希望这样结合 springbbot 实际运行的工程去学习,能更好的弄懂我们平时用的东西里面的原理.
资源模块用到的单例模式
Mybatis 中使用 VFS 表示虚拟文件系统,用来查找指定路径下的资源,VFS 是一个抽象类,我们可以看到官方提供了 JBoss6VFS 和 DefaultVFS 两个实现,具体哪个实现,就要我们通过 springboot 应用 debug 了
而且通过日志我们可以发现,最后用的都不是这两种,而是 SpringbootVFS
单例模式的实现
通常来说,单例模式有四种实现方式,饿汉,懒汉,多线程下的懒汉,静态内部类这四种方式
饿汉:
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 就是用的这种方式,如下图所示:
最后说两句
大家在学习过程中有什么问题,欢迎随时留言和小刀交流
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于