Class OpenClassLoader

java.lang.Object
cloud.opencode.base.classloader.OpenClassLoader

public final class OpenClassLoader extends Object
OpenClassLoader - ClassLoader Facade OpenClassLoader - 类加载器门面

Unified entry point for class loader operations.

类加载器操作的统一入口。

Features | 主要功能:

  • Get default/context classloader - 获取默认/上下文类加载器
  • Create isolated classloader - 创建隔离类加载器
  • Create hot-swap classloader - 创建热替换类加载器
  • ClassLoader utilities - 类加载器工具

Usage Examples | 使用示例:

// Get default classloader
ClassLoader cl = OpenClassLoader.getDefaultClassLoader();

// Create isolated classloader
IsoClassLoader iso = OpenClassLoader.isolatedLoader()
    .fromJar("/path/to/plugin.jar")
    .addIsolatedPackage("com.plugin")
    .build();

// Execute with specific classloader
String result = OpenClassLoader.withClassLoader(customLoader, () -> {
    // Code runs with customLoader as context classloader
    return "result";
});

Security | 安全性:

  • Thread-safe: Yes - 线程安全: 是
  • Null-safe: Yes - 空值安全: 是
Since:
JDK 25, opencode-base-classloader V1.0.0
Author:
Leon Soo www.LeonSoo.com
See Also:
  • Method Details

    • getDefaultClassLoader

      public static ClassLoader getDefaultClassLoader()
      Get default classloader 获取默认类加载器

      Priority: Context ClassLoader > Class ClassLoader > System ClassLoader

      优先级: 上下文类加载器 > 类的类加载器 > 系统类加载器

      Returns:
      default classloader | 默认类加载器
    • getContextClassLoader

      public static ClassLoader getContextClassLoader()
      Get context classloader 获取上下文类加载器
      Returns:
      context classloader | 上下文类加载器
    • getClassLoader

      public static ClassLoader getClassLoader(Class<?> clazz)
      Get classloader for specified class 获取指定类的类加载器
      Parameters:
      clazz - class | 类
      Returns:
      classloader | 类加载器
    • isolatedLoader

      public static IsoClassLoader.Builder isolatedLoader()
      Create isolated classloader builder 创建隔离类加载器构建器
      Returns:
      builder | 构建器
    • hotSwapLoader

      public static HotSwapClassLoader hotSwapLoader()
      Create hot-swap classloader 创建热替换类加载器
      Returns:
      hot-swap classloader | 热替换类加载器
    • hotSwapLoader

      public static HotSwapClassLoader hotSwapLoader(ClassLoader parent)
      Create hot-swap classloader with parent 使用父加载器创建热替换类加载器
      Parameters:
      parent - parent classloader | 父类加载器
      Returns:
      hot-swap classloader | 热替换类加载器
    • resourceLoader

      public static ResourceClassLoader resourceLoader(Path... resourcePaths)
      Create resource classloader 创建资源类加载器
      Parameters:
      resourcePaths - resource paths | 资源路径
      Returns:
      resource classloader | 资源类加载器
    • withClassLoader

      public static <T> T withClassLoader(ClassLoader classLoader, Supplier<T> supplier)
      Execute operation with specified classloader as context classloader 使用指定类加载器作为上下文类加载器执行操作
      Type Parameters:
      T - return type | 返回类型
      Parameters:
      classLoader - classloader to use | 要使用的类加载器
      supplier - operation to execute | 要执行的操作
      Returns:
      operation result | 操作结果
    • withClassLoader

      public static void withClassLoader(ClassLoader classLoader, Runnable runnable)
      Execute operation with specified classloader as context classloader 使用指定类加载器作为上下文类加载器执行操作
      Parameters:
      classLoader - classloader to use | 要使用的类加载器
      runnable - operation to execute | 要执行的操作
    • isVisible

      public static boolean isVisible(Class<?> clazz, ClassLoader classLoader)
      Check if class is visible (loadable) by classloader 检查类是否对类加载器可见(可加载)
      Parameters:
      clazz - class to check | 要检查的类
      classLoader - classloader | 类加载器
      Returns:
      true if visible | 可见返回 true
    • getClassLoaderHierarchy

      public static List<ClassLoader> getClassLoaderHierarchy(ClassLoader classLoader)
      Get classloader hierarchy 获取类加载器层次
      Parameters:
      classLoader - starting classloader | 起始类加载器
      Returns:
      list of classloaders from child to parent | 从子到父的类加载器列表
    • findDefiningClassLoader

      public static Optional<ClassLoader> findDefiningClassLoader(String className)
      Find classloader that defines the class 查找定义类的类加载器
      Parameters:
      className - class name | 类名
      Returns:
      optional classloader | 可选的类加载器
    • loadClass

      public static Optional<Class<?>> loadClass(String className)
      Load class safely (returns Optional) 安全加载类(返回 Optional)
      Parameters:
      className - class name | 类名
      Returns:
      optional class | 可选的类
    • loadClass

      public static Optional<Class<?>> loadClass(String className, ClassLoader classLoader)
      Load class safely with specified classloader 使用指定类加载器安全加载类
      Parameters:
      className - class name | 类名
      classLoader - classloader | 类加载器
      Returns:
      optional class | 可选的类