• Mybatis VFS涉及到的单例模式


    静态内部类方式单例模式示例

    package com.wjz.mybatis.singleton;
    
    import com.wjz.mybatis.pojo.Person;
    
    /**
     * 静态内部类方式单例模式
     * 
     * @author iss002
     *
     */
    public abstract class StaticInnerTest {
    
        // 私有的静态内部类,只会在newInstance方法中被使用
        private static class PersonHondler {
            // 访问静态内部类的静态字段时静态内部类才会被初始化
            // 类加载机制保证类只加载一次即保证线程安全
            public static final Person person = new Person();
        }
    
        public static Person newInstance() {
            return PersonHondler.person;
        }
    
    }

    VFS涉及的单例模式

    public abstract class VFS {
    
        public static VFS getInstance() {
            return VFSHolder.INSTANCE;
        }
    
        private static class VFSHolder {
        static final VFS INSTANCE = createVFS();
    
        /** Singleton instance holder. */
        @SuppressWarnings("unchecked")
        static VFS createVFS() {
              // Try the user implementations first, then the built-ins
              List<Class<? extends VFS>> impls = new ArrayList<Class<? extends VFS>>();
              impls.addAll(USER_IMPLEMENTATIONS);
              impls.addAll(Arrays.asList((Class<? extends VFS>[]) IMPLEMENTATIONS));
    
              // Try each implementation class until a valid one is found
              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()) {
                    if (log.isDebugEnabled()) {
                      log.debug("VFS implementation " + impl.getName() +
                          " is not valid in this environment.");
                    }
                  }
                } catch (InstantiationException e) {
                  log.error("Failed to instantiate " + impl, e);
                  return null;
                } catch (IllegalAccessException e) {
                  log.error("Failed to instantiate " + impl, e);
                  return null;
                }
              }
    
              if (log.isDebugEnabled()) {
                log.debug("Using VFS adapter " + vfs.getClass().getName());
              }
    
              return vfs;
            }
        }
    }
  • 相关阅读:
    Linux添加PATH,即命令自动补全功能
    编程的奥义
    Windows SDK笔记
    一个烂电源,毁了我一天的工作
    贪念
    VC菜菜鸟创建一个即时串口通信程序
    IP视频监控系统开放式平台的5个标志
    敷铜的入门
    解决:Ulead VideoStudio 启动黑屏的问题
    数据结构中,关于“大小端”的数据存储方式的相关问题
  • 原文地址:https://www.cnblogs.com/BINGJJFLY/p/9914699.html
Copyright © 2020-2023  润新知