Java极客 | 作者 / 铿然一叶
这是Java极客的第 63 篇原创文章
相关阅读:
1. 应用场景
修复bug,不需要重启服务,动态加载修改的bug类。
动态升级,在android系统中,可以通过动态加载APK绕过应用市场的的升级策略,自行定制升级策略。
2. 例子
网上描述ClassLoader加载的文章很多,这里不再详细描述,需要注意的是:将需要动态加载的类放到独立的jar文件中,从一开始就通过动态加载方式加载,不要放到主进程的jar包中,那样会被默认加载器加载,会导致在更新后无法重新加载。
2.1. 主项目代码/模块
此模块放不需要动态加载的类。
2.1.1. HotClassLoader.java
用于实现动态记载功能。
import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
// 热加载器
public class HotClassLoader{
private static final long LOADER_INTERVAL = 3;
// 指向动态加载module的jar文件
private static final String HOT_UPDATE_JAR_PATH = "D:\\ClassLoaderDemo-Service\\target\\ClassLoaderDemo-Service-1.0-SNAPSHOT.jar";
static URLClassLoader class