利用classloader動態載入jar包
阿新 • • 發佈:2019-02-01
第一種方法:
第二種方法:
匯入多個jar包時,第一種方法載入jar包中的類時,需知道載入該jar包的URLClassLoader,第二種方法則不需要,可使用Class.forName("類名");載入類
URL url= file.toURI().toURL();//將File型別轉為URL型別,file為jar包路徑
URLClassLoader urlClassLoader=new URLClassLoader(new URL[] {url});
Class c=urlClassLoader.loadClass("類名");
此種方法是構造一個新的URLClassLoader物件,利用該物件載入指定路徑下的jar包,此種方法只能在此處載入該jar包中的類,呼叫其方法,不能在程式中的其他地方呼叫。如果將urlClassLoader宣告為靜態的則可以在其它地方呼叫第二種方法:
此種方法是得到系統類載入器,利用該載入器載入指定路徑下的jar包,此種方法與java命令中的javac -cp是同等效果,都能在當前執行環境中改變CLASSPATH,所以利用該方法載入jar包後,在程式任一地方都能載入該jar包中的類,呼叫其方法。URL url= file.toURI().toURL();//將File型別轉為URL型別,file為jar包路徑 //得到系統類載入器 URLClassLoader urlClassLoader= (URLClassLoader) ClassLoader.getSystemClassLoader(); //因為URLClassLoader中的addURL方法的許可權為protected所以只能採用反射的方法呼叫addURL方法 Method add = URLClassLoader.class.getDeclaredMethod("addURL", new Class[] { URL.class }); add.setAccessible(true); add.invoke(urlClassLoader, new Object[] {url }); Class c=Class.forName("類名"); 或者 Class c=urlClassLoader.loadClass("類名");
匯入多個jar包時,第一種方法載入jar包中的類時,需知道載入該jar包的URLClassLoader,第二種方法則不需要,可使用Class.forName("類名");載入類