ClassLoader學習和類加載器加載Jar文件

類加載器,參考: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文件的程序已經寫好了,運行結果如下:

運行結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章