JAVA动态加载和卸载jar包
JAVA动态加载jar包的代码如下:
URLClassLoader urlClassLoader = null;
public void load() {
File file = new File("C:\\Users\\dengshengcai\\Desktop\\新建文件夹 (2)\\analyse_plugins.jar");
System.out.println(new File(".").getAbsolutePath());
try {
urlClassLoader = new URLClassLoader(new URL[]{file.toURI().toURL()});
Class classStudentServiceImpl = urlClassLoader.loadClass("com.el.cardata.analyse.plugins.Test");
Object o = classStudentServiceImpl.newInstance();
IAnalyse iAnalyse = (IAnalyse) o;
if (null != iAnalyse)
iAnalyse.analyse(null);
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
卸载jar包的代码如下:
public void unLoad() {
if (null != urlClassLoader)
ClassLoaderUtil.releaseLoader(urlClassLoader);
}
使用上述代码动态加载和卸载jar包,经过测试,发现一些比较特殊的情况,针对到我的测试,我谈谈对动态加载jar包的几种测试情况:
1.在动态加载的jar包中包含静态变量的值,当unload之后重新load进来时已全部清空,即load之后完全是一个新环境;
2.在动态加载的jar包中如果启动了新线程,且线程一直运行,在unload之后,线程并未结束,但是被加载的jar包文件(例子中的文件为:"C:\\Users\\dengshengcai\\Desktop\\新建文件夹 (2)\\analyse_plugins.jar")却可以被删除,说明该jar包已经被jvm释放了。这种情况的具体原因不清楚,待以后去了解分析;