Mybatis原理分析之七:资源加载

包结构

本包主要包含了资源加载和访问相关的类。

一 VFS类介绍

 作用:

虚拟文件系统(VFS),用来读取服务器里的资源
提供了2个实现 JBoss6VFS 和 DefaultVFS,并提供了用户扩展点,可定义VFS实现

加载顺序: 自定义VFS实现 > 默认VFS实现 取第一个加载成功的

添加用户VFS实现

public static void addImplClass(Class<? extends VFS> clazz) {
  if (clazz != null) {
    USER_IMPLEMENTATIONS.add(clazz);
  }
}

二 ClassLoaderWrapper

封装了5个类加载器,getClassLoaders方法

//一共5个类加载器
ClassLoader[] getClassLoaders(ClassLoader classLoader) {
  return new ClassLoader[]{
      classLoader,
      defaultClassLoader,
      Thread.currentThread().getContextClassLoader(),
      getClass().getClassLoader(),
      systemClassLoader};
}
类加载器查找资源

/*
 * Get a resource as a URL using the current class path
 * 用5个类加载器一个个查找资源,只要其中任何一个找到,就返回
 *
 * @param resource    - the resource to locate
 * @param classLoader - the class loaders to examine
 * @return the resource or null
 */
URL getResourceAsURL(String resource, ClassLoader[] classLoader) {

  URL url;

  for (ClassLoader cl : classLoader) {

    if (null != cl) {

      // look for the resource as passed in...
      url = cl.getResource(resource);

      // ...but some class loaders want this leading "/", so we'll add it
      // and try again if we didn't find the resource
      if (null == url) {
        url = cl.getResource("/" + resource);
      }

      // "It's always in the last place I look for it!"
      // ... because only an idiot would keep looking for it after finding it, so stop looking already.
      if (null != url) {
        return url;
      }

    }

  }

  // didn't find it anywhere.
  return null;

}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值