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 - 类卸载
- Version rollback - 版本回退
- Hot-swap event notification - 热替换事件通知
Usage Examples | 使用示例:
HotSwapClassLoader loader = HotSwapClassLoader.create();
loader.addListener((name, oldV, newV) ->
System.out.println(name + ": v" + oldV + " -> v" + newV));
Class<?> v1 = loader.loadClass("MyClass", bytecodeV1);
// After modification
Class<?> v2 = loader.loadClass("MyClass", bytecodeV2);
// Rollback to v1
Optional<Class<?>> rolled = loader.rollback("MyClass");
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 使用指定父加载器创建热替换类加载器HotSwapClassLoader(ClassLoader parent, int maxHistoryVersions) Create HotSwap classloader with specified parent and max history versions 使用指定父加载器和最大历史版本数创建热替换类加载器 -
Method Summary
Modifier and TypeMethodDescriptionvoidaddListener(HotSwapListener listener) Add hot-swap event listener 添加热替换事件监听器voidclear()Clear all loaded classes 清除所有已加载的类voidclose()static HotSwapClassLoadercreate()Create HotSwap classloader with default parent 使用默认父加载器创建热替换类加载器static HotSwapClassLoadercreate(int maxHistoryVersions) Create HotSwap classloader with default parent and specified max history versions 使用默认父加载器和指定最大历史版本数创建热替换类加载器static HotSwapClassLoadercreate(ClassLoader parent) Create HotSwap classloader with specified parent 使用指定父加载器创建热替换类加载器static HotSwapClassLoadercreate(ClassLoader parent, int maxHistoryVersions) Create HotSwap classloader with specified parent and max history versions 使用指定父加载器和最大历史版本数创建热替换类加载器protected Class<?> Optional<byte[]> getBytecode(String className) Get bytecode of loaded class 获取已加载类的字节码intgetHistoryCount(String className) Get version history count for a class 获取类的历史版本数量Get all loaded class names 获取所有已加载的类名intGet max history versions setting 获取最大历史版本设置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 从文件重新加载类voidremoveListener(HotSwapListener listener) Remove hot-swap event listener 移除热替换事件监听器Rollback to previous version of a class 回退到类的上一个版本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 | 父类加载器
-
HotSwapClassLoader
Create HotSwap classloader with specified parent and max history versions 使用指定父加载器和最大历史版本数创建热替换类加载器- Parameters:
parent- parent classloader | 父类加载器maxHistoryVersions- max history versions to keep | 保留的最大历史版本数
-
-
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 | 新的热替换类加载器
-
create
Create HotSwap classloader with default parent and specified max history versions 使用默认父加载器和指定最大历史版本数创建热替换类加载器- Parameters:
maxHistoryVersions- max history versions to keep | 保留的最大历史版本数- Returns:
- new HotSwapClassLoader | 新的热替换类加载器
-
create
Create HotSwap classloader with specified parent and max history versions 使用指定父加载器和最大历史版本数创建热替换类加载器- Parameters:
parent- parent classloader | 父类加载器maxHistoryVersions- max history versions to keep | 保留的最大历史版本数- 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
-
rollback
-
getHistoryCount
Get version history count for a class 获取类的历史版本数量- Parameters:
className- class name | 类名- Returns:
- history count | 历史版本数量
-
addListener
Add hot-swap event listener 添加热替换事件监听器- Parameters:
listener- listener to add | 要添加的监听器
-
removeListener
Remove hot-swap event listener 移除热替换事件监听器- Parameters:
listener- listener to remove | 要移除的监听器
-
getMaxHistoryVersions
public int getMaxHistoryVersions()Get max history versions setting 获取最大历史版本设置- Returns:
- max history versions | 最大历史版本数
-
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
-