MyBatis | 使用Resources读取资源文件流程解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 使用Resources读取资源文件流程解析

读取资源文件

MyBatis中读取资源文件示例代码:

// 资源文件路径,MyBatis配置文件
String resource = "mybatis-config.xml";
// 读取资源文件,获取一个输入流对象
InputStream inputStream = Resources.getResourceAsStream(resource);

在 MyBatis 中使用ResourcegetResourceAsStream()方法读取资源文件,在getResourceAsStream()方法内部,又去调用了ClassLoaderWrappergetResourceAsStream方法。
ClassLoaderWrapper类中getResourceAsStream方法的源码如下:

/**
 * 依次使用5种类加载器读取资源文件
 * @param resource 资源文件路径
 * @param classLoader 类加载器
 * @return 资源文件流,可能为null
 */
InputStream getResourceAsStream(String resource, ClassLoader[] classLoader) {
   
   
  // 依次使用5种类加载器
  for (ClassLoader cl : classLoader) {
   
   
    // 如果类加载器不为空
    if (null != cl) {
   
   
      // 读取资源文件
      InputStream returnValue = cl.getResourceAsStream(resource);
      // 如果上步读取到的内容为空,会在资源文件路径前添加斜杠,然后再次读取资源文件
      if (null == returnValue) {
   
   
        returnValue = cl.getResourceAsStream("/" + resource);
      }
      // 如果成功读取到资源文件内容,返回资源文件流
      if (null != returnValue) {
   
   
        return returnValue;
      }
    }
  }
  // 如果使用所有的类加载器后仍然没有成功读取资源文件,则返回null
  return null;
}

其中参数resource为资源文件路径,classLoaderClassLoaderWrapper中内置的类加载器数组。
使用ClassLoaderWrapper读取资源文件或者加载类时,依次使用自定义类加载器、默认类加载器、线程上下文类加载器、MyBatis类加载器、系统类加载器。如果类加载器为空或者读取到的内容为空,会继续尝试使用下一个类加载器。
MyBatis读取资源文件类加载器使用顺序.jpg

读取资源文件时,单个类加载器执行流程如下图:
MyBatis单个类加载器读取资源文件流程.jpg

类加载器

ClassLoaderWrapper中封装了5种类加载器,这5种类加载器可以通过getClassLoaders方法获取。getClassLoaders方法代码如下所示:

/**
 * 获取所有类加载器
 * @param classLoader 自定义类加载器
 * @return 所有类加载器
 */
ClassLoader[] getClassLoaders(ClassLoader classLoader) {
   
   
  return new ClassLoader[] {
   
   
    classLoader,
    defaultClassLoader,
    // 当前线程的上下文类加载器
    Thread.currentThread().getContextClassLoader(),
    // MyBatis类的类加载器
    getClass().getClassLoader(),
    // 系统类加载器
    systemClassLoader
  };
}

由上面的代码可以看出,5种类加载器分别为:

  • 自定义类加载器,可能为 null;
  • 默认类加载器,可能为 null;
  • 线程上下文类加载器;
  • MyBatis类加载器;
  • 系统类加载器,在ClassLoaderWrapper
目录
相关文章
|
30天前
|
监控 安全 开发工具
鸿蒙HarmonyOS应用开发 | HarmonyOS Next-从应用开发到上架全流程解析
HarmonyOS Next是华为推出的最新版本鸿蒙操作系统,强调多设备协同和分布式技术,提供丰富的开发工具和API接口。本文详细解析了从应用开发到上架的全流程,包括环境搭建、应用设计与开发、多设备适配、测试调试、应用上架及推广等环节,并介绍了鸿蒙原生应用开发者激励计划,帮助开发者更好地融入鸿蒙生态。通过DevEco Studio集成开发环境和华为提供的多种支持工具,开发者可以轻松创建并发布高质量的鸿蒙应用,享受技术和市场推广的双重支持。
317 11
|
1月前
|
域名解析 弹性计算 安全
阿里云服务器租用、注册域名、备案及域名解析完整流程参考(图文教程)
对于很多初次建站的用户来说,选购云服务器和注册应及备案和域名解析步骤必须了解的,目前轻量云服务器2核2G68元一年,2核4G4M服务器298元一年,域名注册方面,阿里云推出域名1元购买活动,新用户注册com和cn域名2年首年仅需0元,xyz和top等域名首年仅需1元。对于建站的用户来说,购买完云服务器并注册好域名之后,下一步还需要操作备案和域名绑定。本文为大家展示阿里云服务器的购买流程,域名注册、绑定以及备案的完整流程,全文以图文教程形式为大家展示具体细节及注意事项,以供新手用户参考。
|
2月前
|
缓存 监控 Java
Java线程池提交任务流程底层源码与源码解析
【11月更文挑战第30天】嘿,各位技术爱好者们,今天咱们来聊聊Java线程池提交任务的底层源码与源码解析。作为一个资深的Java开发者,我相信你一定对线程池并不陌生。线程池作为并发编程中的一大利器,其重要性不言而喻。今天,我将以对话的方式,带你一步步深入线程池的奥秘,从概述到功能点,再到背景和业务点,最后到底层原理和示例,让你对线程池有一个全新的认识。
65 12
|
2月前
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
3月前
|
JavaScript 前端开发 UED
Vue执行流程及渲染解析
【10月更文挑战第5天】
|
3月前
|
存储 搜索推荐 数据库
运用LangChain赋能企业规章制度制定:深入解析Retrieval-Augmented Generation(RAG)技术如何革新内部管理文件起草流程,实现高效合规与个性化定制的完美结合——实战指南与代码示例全面呈现
【10月更文挑战第3天】构建公司规章制度时,需融合业务实际与管理理论,制定合规且促发展的规则体系。尤其在数字化转型背景下,利用LangChain框架中的RAG技术,可提升规章制定效率与质量。通过Chroma向量数据库存储规章制度文本,并使用OpenAI Embeddings处理文本向量化,将现有文档转换后插入数据库。基于此,构建RAG生成器,根据输入问题检索信息并生成规章制度草案,加快更新速度并确保内容准确,灵活应对法律与业务变化,提高管理效率。此方法结合了先进的人工智能技术,展现了未来规章制度制定的新方向。
63 3
|
3月前
|
敏捷开发 数据可视化 测试技术
解析软件项目管理:以板栗看板为例,其如何有效影响并优化软件开发流程
软件项目管理是一个复杂而重要的过程,涵盖了软件产品的创建、维护和优化。其核心目标是确保软件项目能够顺利完成,同时满足预定的质量、时间和预算目标。本文将深入探讨软件项目管理的内涵及其对软件开发过程的影响,并介绍一些有效的管理工具。
|
1天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
10 2
|
3月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
177 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
3月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
116 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块

热门文章

最新文章

推荐镜像

更多