Hutool Hutool
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
(opens new window)
🏡首页
📖指南
🎢最佳实践
💖支持
💡javaDoc (opens new window)
⏳更新记录 (opens new window)
  • 🍎gitee (opens new window)
  • 🍏github (opens new window)
  • 快速入门

  • 核心(hutool-core)

    • AI(Hutool-ai)

    • 注解(annotation)

    • 数组(array)

    • JavaBean(bean)

    • 缓存(cache)

    • 类加载器(classloader)

      • 简介
        • 📚简介
        • 🏗️核心类结构
        • 🔧核心功能
          • 1. 类加载器获取
          • 2. 类加载
          • 3. 外部资源加载
        • 🚀快速开始
          • 1. 获取类加载器
          • 2. 加载类
          • 3. 加载外部Jar
          • 4. 资源类加载
        • 📝高级用法
          • 1. 类存在性检查
          • 2. 加载类到系统ClassLoader
          • 3. 自定义类加载器链
        • 🎯设计优势
        • 📌注意事项
        • 📚相关文档
      • 类加载器-ClassLoaderUtil
      • 外部Jar加载器-JarClassLoader
      • 资源类加载器-ResourceClassLoader
    • 编码解码(codec)

    • 集合(collection)

    • 比较器(comparator)

    • 压缩(compress)

    • 类型转换(convert)

    • 数据(data)

    • 日期时间(date)

    • 异常(exception)

    • 函数(func)

    • IO流(io)

    • 语言特性(lang)

    • Map(map)

    • 数字数学(math)

    • 网络(net)

    • 对象池(pool)

    • 反射(reflect)

    • 正则(regex)

    • 服务提供(spi)

    • 聚合操作(stream)

    • 字符串文本(text)

    • 并发和线程(thread)

    • 树结构(tree)

    • 工具集合(util)

    • XML操作(xml)

  • 定时任务(hutool-cron)

  • 加密(hutool-crypto)

  • 数据库(hutool-db)

  • 扩展(hutool-extra)

  • HTTP(hutool-http)

  • 日志(hutool-log)

  • 配置文件(hutool-setting)

  • JSON(hutool-json)

  • Office办公(hutool-poi)

  • 套接字(hutool-socket)

  • GUI(hutool-swing)

  • 指南
  • 核心(hutool-core)
  • 类加载器(classloader)
Hutool
2026-01-03
目录

简介

# 📚简介

Hutool的类加载器模块提供了一系列便捷的类加载工具,简化了类加载器的获取、资源加载和外部Jar加载等操作。该模块包含多个核心类,用于处理不同场景下的类加载需求。

# 🏗️核心类结构

类名 主要职责 核心功能
ClassLoaderUtil 类加载器工具类 提供类加载器获取、类加载等静态方法
JarClassLoader 外部Jar的类加载器 加载外部Jar文件和目录中的类
ResourceClassLoader 资源类加载器 加载任意类型资源中的类

# 🔧核心功能

# 1. 类加载器获取

ClassLoaderUtil 提供了多种获取类加载器的方式,包括:

  • 获取当前线程的ContextClassLoader
  • 获取调用者的ClassLoader
  • 获取系统ClassLoader
  • 获取自定义ClassLoader

# 2. 类加载

支持多种场景的类加载:

  • 加载指定名称的类
  • 加载原始类型、数组类型和内部类
  • 加载外部Jar或目录中的类
  • 延迟加载和初始化控制

# 3. 外部资源加载

  • 加载外部Jar文件到ClassPath
  • 加载目录中的所有Jar文件
  • 加载任意资源中的类

# 🚀快速开始

# 1. 获取类加载器

// 获取默认类加载器
ClassLoader classLoader = ClassLoaderUtil.getClassLoader();

// 获取当前线程的ContextClassLoader
ClassLoader contextClassLoader = ClassLoaderUtil.getContextClassLoader();

// 获取系统ClassLoader
ClassLoader systemClassLoader = ClassLoaderUtil.getSystemClassLoader();

# 2. 加载类

// 加载普通类
Class<?> userClass = ClassLoaderUtil.loadClass("com.example.User");

// 加载原始类型
Class<?> intClass = ClassLoaderUtil.loadClass("int");

// 加载数组类型
Class<?> stringArrayClass = ClassLoaderUtil.loadClass("java.lang.String[]");

// 加载内部类
Class<?> threadStateClass = ClassLoaderUtil.loadClass("java.lang.Thread.State");

# 3. 加载外部Jar

// 加载单个Jar文件
JarClassLoader jarLoader = JarClassLoader.load(new File("/path/to/your.jar"));
Class<?> externalClass = jarLoader.loadClass("com.external.Class");

// 加载目录中的所有Jar
JarClassLoader dirLoader = JarClassLoader.load(new File("/path/to/jar/dir"));
Class<?> dirClass = dirLoader.loadClass("com.dir.Class");

// 便捷加载外部类
Class<?> quickClass = ClassLoaderUtil.loadClass(new File("/path/to/your.jar"), "com.external.Class");

# 4. 资源类加载

// 创建资源映射
Map<String, Resource> resourceMap = new HashMap<>();
resourceMap.put("com.example.CustomClass", new FileResource("/path/to/CustomClass.class"));

// 创建资源类加载器
ResourceClassLoader<Resource> resourceClassLoader = new ResourceClassLoader<>(null, resourceMap);

// 加载资源中的类
Class<?> customClass = resourceClassLoader.loadClass("com.example.CustomClass");

// 动态添加资源并加载
resourceClassLoader.addResource(new UrlResource("https://example.com/AnotherClass.class"));
Class<?> anotherClass = resourceClassLoader.loadClass("com.example.AnotherClass");

# 📝高级用法

# 1. 类存在性检查

// 检查类是否存在
boolean isPresent = ClassLoaderUtil.isPresent("com.example.ExistingClass");
if (isPresent) {
    // 类存在,进行相应处理
}

# 2. 加载类到系统ClassLoader

// 将Jar加载到系统ClassLoader
URLClassLoader systemLoader = JarClassLoader.loadJarToSystemClassLoader(new File("/path/to/your.jar"));
// 现在可以直接使用Class.forName加载Jar中的类
Class<?> systemClass = Class.forName("com.external.Class");

# 3. 自定义类加载器链

// 创建自定义类加载器链
ClassLoader parentLoader = new URLClassLoader(new URL[]{});
JarClassLoader childLoader = new JarClassLoader(new URL[]{}, parentLoader);
childLoader.addJar(new File("/path/to/child.jar"));

// 优先从childLoader加载类
Class<?> chainedClass = childLoader.loadClass("com.chained.Class");

# 🎯设计优势

  1. 简单易用:提供静态工具方法,一行代码即可完成类加载器获取和类加载
  2. 灵活扩展:支持多种类加载场景,包括外部Jar和资源加载
  3. 智能选择:自动选择合适的类加载器,无需手动指定
  4. 安全可靠:继承自URLClassLoader和SecureClassLoader,保证加载安全
  5. 缓存机制:ResourceClassLoader内置类缓存,提高加载效率
  6. 多场景支持:适用于普通类加载、外部Jar加载、资源类加载等多种场景

# 📌注意事项

  1. 类加载器遵循双亲委派模型,注意类加载顺序
  2. 加载外部Jar时,注意Jar文件的完整性和兼容性
  3. 资源类加载器适用于动态加载场景,生产环境建议使用静态加载
  4. 类加载后无法卸载,注意内存使用
  5. 不同类加载器加载的相同类名的类,在JVM中视为不同的类

# 📚相关文档

  • Java类加载机制 (opens new window)
  • URLClassLoader官方文档 (opens new window)
  • SecureClassLoader官方文档 (opens new window)

通过Hutool的类加载器模块,您可以轻松处理各种复杂的类加载场景,简化开发流程,提高代码的灵活性和可扩展性。

弱引用-WeakCache
类加载器-ClassLoaderUtil

← 弱引用-WeakCache 类加载器-ClassLoaderUtil→

Theme by Vdoing | Copyright © 2025-2026 Hutool | Apache-2.0
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式