美文网首页深入剖析Mybatis实现的细节设计模式
第二章 资源加载 单例模式的VFS

第二章 资源加载 单例模式的VFS

作者: Xcdf | 来源:发表于2019-01-15 21:28 被阅读2次

简书 许乐
转载请注明原创出处,谢谢!

  VFS 表示虚拟文件系统(Virtual File System),它用来在磁盘中查找指定路径下的资源。VFS 是一个抽象类,Mybatis提供了JBoss6VFS和DefaultVFS两个VFS实现。用户也可以提供自定义的VFS实现类,后面介绍Mybatis初始化的流程时,还会提到这两个扩展点。

VFS 及其实现类

VFS的核心字段的含义如下:

  //Mybatis提供的两个VFS实现类
  public static final Class<?>[] IMPLEMENTATIONS 
                              = { JBoss6VFS.class, DefaultVFS.class };
  //用户自定义的VFS的实现类,VFS.addImplClass() 方法会将自定义的VFS的Class对象添加到该集合中
  public static final List<Class<? extends VFS>> USER_IMPLEMENTATIONS 
                                = new ArrayList<>();

VFS的核心方法:

  //单例模式的全局唯一访问点
  public static VFS getInstance(){
    return VFSHolder.INSTANCE;
  }

VFS的静态内部类:

private static class VFSHolder {
  static final VFS INSTANCE = createVFS();
  static VFS createVFS() {
    List<? extends VFS> impls = new ArrayList<Class<? extends VFS>>();
    impls.addAll(USER_IMPLEMENTATIONS);// 添加用户自定义的VFS子类 
    impls.addAll(Arrays.asList((Class<? extends VFS>[]) IMPLEMENTATIONS));
    // 遍历impls集合,依次实例化对象并检测VFS对象是否有效,一旦得到有效的VFS对象,则循环结束。
    //由于是链表的数据结构,会先遍历用户自定义的VFS
    VFS vfs = null;
    for (int i = 0; vfs == null || !vfs.isValid(); i++) {
        Class<? extends VFS> impl = impls.get(i);
        try {
            vfs = impl.newInstance();
            if (vfs == null || !vfs.isValid()) {
              // ...写日志
            }
          } catch (Exception e) {
            // ...写日志
            return null;
          }
     }
    return vfs;
  }
}

关于本节的思考
1.Mybatis怎么实现用户自定义的VFS类并使得其可以优先使用自定义VFS来加载资源?
2.Resource 和VFS 的区别?
实验对比差异性

相关文章

  • 第二章 资源加载 单例模式的VFS

    简书 许乐转载请注明原创出处,谢谢!   VFS 表示虚拟文件系统(Virtual File System),它用...

  • 设计模式--单例模式

    单例模式概述 单例模式实现方式 为什么要使用单例模式 单例模式实现方式 饿汉式 类加载后就会将对象加载到内存中,保...

  • Java线程安全的单例模式

    简单的单例模式(饿汉模式) 程序代码加载时,单例即初始化,加重系统负载.未实现懒加载 懒加载的单例模式 双锁延迟加...

  • 第二章 资源加载 单例模式

    简书 许乐转载请注明原创出处,谢谢!   在整个系统中,单例类只有一个实例对象,需要自行完成实例化,并且始终对外提...

  • 面试题汇总(设计模式)

    单例模式 参考:漫画:什么是单例模式?单例模式的七种写法 1. 饿汉式 类加载较慢,但获取对象的速度快 基于类加载...

  • 技术文章收集

    单例模式Java 类加载静态类加载时机

  • 单例模式

    单例模式的实现: 单例设计模式分类两种: -饿汉式:类加载就会导致该单实例对象被创建 -懒汉式:类加载不会导致该单...

  • Java ClassLoader机制(源码级别) —从内部类单

    内部类单例是种很好的单例模式,利用ClassLoader 线程安全的加载模式 为了更好的理解类的加载机制,我们来深...

  • 单例模式

    单例,全局只有一个实例 单例模式可以分为懒汉式和饿汉式: 懒汉式单例模式:在类加载时不初始化。 饿汉式单例模式:在...

  • 设计模式-单例模式(二)

    单例模式,目标就是在JVM内创建线程安全的单个实例.用途很多,比如加载资源配置文件.在Java中实现单例的方法有很...

网友评论

    本文标题:第二章 资源加载 单例模式的VFS

    本文链接:https://www.haomeiwen.com/subject/dvjudqtx.html