Class HotSwapClassLoader
java.lang.Object
java.lang.ClassLoader
cloud.opencode.base.classloader.loader.HotSwapClassLoader
- All Implemented Interfaces:
AutoCloseable
HotSwap ClassLoader - Supports dynamic class replacement
热替换类加载器 - 支持类的动态替换
ClassLoader that supports hot swapping of classes at runtime.
支持运行时热替换类的类加载器。
Features | 主要功能:
- Load classes from bytecode - 从字节码加载类
- Reload modified classes - 重新加载修改的类
- Version tracking - 版本跟踪
- Class unloading - 类卸载
Usage Examples | 使用示例:
HotSwapClassLoader loader = HotSwapClassLoader.create();
Class<?> v1 = loader.loadClass("MyClass", bytecodeV1);
// After modification
Class<?> v2 = loader.reloadClass("MyClass", classFile);
Security | 安全性:
- Thread-safe: Yes - 线程安全: 是
- Null-safe: Yes - 空值安全: 是
- Since:
- JDK 25, opencode-base-classloader V1.0.0
- Author:
- Leon Soo www.LeonSoo.com
- See Also:
-
Constructor Summary
ConstructorsConstructorDescriptionCreate HotSwap classloader with default parent 使用默认父加载器创建热替换类加载器HotSwapClassLoader(ClassLoader parent) Create HotSwap classloader with specified parent 使用指定父加载器创建热替换类加载器 -
Method Summary
Modifier and TypeMethodDescriptionvoidclear()Clear all loaded classes 清除所有已加载的类voidclose()static HotSwapClassLoadercreate()Create HotSwap classloader with default parent 使用默认父加载器创建热替换类加载器static HotSwapClassLoadercreate(ClassLoader parent) Create HotSwap classloader with specified parent 使用指定父加载器创建热替换类加载器protected Class<?> Optional<byte[]> getBytecode(String className) Get bytecode of loaded class 获取已加载类的字节码Get all loaded class names 获取所有已加载的类名intgetVersion(String className) Get current version of class 获取类的当前版本booleanisClosed()Check if classloader is closed 检查类加载器是否已关闭booleanCheck if class is loaded 检查类是否已加载Class<?> Class<?> Load or reload class from bytecode 从字节码加载或重新加载类Class<?> reloadClass(String name, Path classFile) Reload class from file 从文件重新加载类voidunloadClass(String className) Unload class (will be reloaded on next access) 卸载类(下次访问时重新加载)Methods inherited from class ClassLoader
clearAssertionStatus, defineClass, defineClass, defineClass, defineClass, definePackage, findClass, findLibrary, findLoadedClass, findResource, findResource, findResources, findSystemClass, getClassLoadingLock, getDefinedPackage, getDefinedPackages, getName, getPackage, getPackages, getParent, getPlatformClassLoader, getResource, getResourceAsStream, getResources, getSystemClassLoader, getSystemResource, getSystemResourceAsStream, getSystemResources, getUnnamedModule, isRegisteredAsParallelCapable, loadClass, registerAsParallelCapable, resolveClass, resources, setClassAssertionStatus, setDefaultAssertionStatus, setPackageAssertionStatus, setSigners
-
Constructor Details
-
HotSwapClassLoader
public HotSwapClassLoader()Create HotSwap classloader with default parent 使用默认父加载器创建热替换类加载器 -
HotSwapClassLoader
Create HotSwap classloader with specified parent 使用指定父加载器创建热替换类加载器- Parameters:
parent- parent classloader | 父类加载器
-
-
Method Details
-
create
Create HotSwap classloader with default parent 使用默认父加载器创建热替换类加载器- Returns:
- new HotSwapClassLoader | 新的热替换类加载器
-
create
Create HotSwap classloader with specified parent 使用指定父加载器创建热替换类加载器- Parameters:
parent- parent classloader | 父类加载器- Returns:
- new HotSwapClassLoader | 新的热替换类加载器
-
loadClass
-
reloadClass
-
loadClass
- Overrides:
loadClassin classClassLoader- Throws:
ClassNotFoundException
-
findClass
- Overrides:
findClassin classClassLoader- Throws:
ClassNotFoundException
-
getVersion
Get current version of class 获取类的当前版本- Parameters:
className- class name | 类名- Returns:
- version number or 0 if not loaded | 版本号,未加载返回 0
-
getLoadedClassNames
-
isLoaded
Check if class is loaded 检查类是否已加载- Parameters:
className- class name | 类名- Returns:
- true if loaded | 已加载返回 true
-
getBytecode
-
unloadClass
Unload class (will be reloaded on next access) 卸载类(下次访问时重新加载)- Parameters:
className- class name | 类名
-
clear
public void clear()Clear all loaded classes 清除所有已加载的类 -
close
public void close()- Specified by:
closein interfaceAutoCloseable
-
isClosed
public boolean isClosed()Check if classloader is closed 检查类加载器是否已关闭- Returns:
- true if closed | 已关闭返回 true
-