1. 程式人生 > >利用classloader動態載入jar包

利用classloader動態載入jar包

第一種方法:
URL url= file.toURI().toURL();//將File型別轉為URL型別,file為jar包路徑
URLClassLoader urlClassLoader=new URLClassLoader(new URL[] {url});
Class c=urlClassLoader.loadClass("類名");
此種方法是構造一個新的URLClassLoader物件,利用該物件載入指定路徑下的jar包,此種方法只能在此處載入該jar包中的類,呼叫其方法,不能在程式中的其他地方呼叫。如果將urlClassLoader宣告為靜態的則可以在其它地方呼叫
第二種方法:
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包,此種方法與java命令中的javac -cp是同等效果,都能在當前執行環境中改變CLASSPATH,所以利用該方法載入jar包後,在程式任一地方都能載入該jar包中的類,呼叫其方法。

匯入多個jar包時,第一種方法載入jar包中的類時,需知道載入該jar包的URLClassLoader,第二種方法則不需要,可使用Class.forName("類名");載入類