類加載器,參考:https://blog.csdn.net/briblue/article/details/54973413
本文主要的實現的功能是把一個jar文件加載到ClassLoader中
原理:把Jar文件加載成URL,通過構造一個URLClassLoader,把原來的ClassLoader和Jar文件合併
準備文件:helloword.jar
其中內容爲
package master.classloadertest;
public class HelloWord {
public void sayHelloWord(){
System.out.println("HelloWord");
}
}
通過export導出成jar文件,本次的jar名爲test.jar,然後新建一個類,需要把class HelloWord改名或者刪除
App URLClassLoader的主類爲:
public class App {
public static void main(String[] args) throws Exception {
addJarFile("C:\\Users\\master\\Desktop\\test.jar");
ClassLoader cl=Thread.currentThread().getContextClassLoader();
//通過反射來調用test.jar中HelloWord類的sayHelloWord方法
Class c=cl.loadClass("master.ostest.HelloWord");
Object o=c.newInstance();
Method m=c.getMethod("sayHelloWord");
m.invoke(o,null);
}
/*
*加載jar文件到ClassLoader中
*@param jarFile jar文件的完整路徑
*/
public static void addJarFile(String jarFile) throws IOException {
ClassLoader prevClassLoader = Thread.currentThread().getContextClassLoader();
String urlPath = "jar:" + new File(jarFile).toURI().toURL() + "!/";
URL[] jarUrlArray = { new URL(urlPath) };
//通過構造URLClassLoader把jar文件加載到ClassLoader中
URLClassLoader cl = URLClassLoader.newInstance(jarUrlArray, prevClassLoader);
Thread.currentThread().setContextClassLoader(cl);
}
}
到此爲止,加載Jar文件的程序已經寫好了,運行結果如下: