场景:
把项目中要用到的class文件和jar放到D:\loader\terry\codex目录下,如何让项目通过代码的方式实现加载和使用这些类呢?
方案:通过URLClassLoader构造D:\loader\terry\codex这个路径下的类加载器,在通过Java反射机制进行实例化使用这些类
例子:
HelloWorld.java:
package terry.codex;
/**
* @编写人: yh.zeng
* @编写时间:2017-12-3 下午2:29:57
* @文件描述: todo
*/
public class HelloWorld {
public void sayHello(){
System.out.println("HelloWorld!");
}
}
Test.java:
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;
/**
* @编写人: yh.zeng
* @编写时间:2017-12-3 下午2:26:59
* @文件描述: todo
*/
public class Test {
public static void main(String args[]){
String fileUrlString = new File("D:\\loader").toURI().toString();
fileUrlString = fileUrlString.replaceAll("!/", "%21/");
try {
ClassLoader classLoader = new URLClassLoader(new URL[]{new URL(fileUrlString)});
Class HelloWorldClazz = classLoader.loadClass("terry.codex.HelloWorld");
Object helloWorld = HelloWorldClazz.newInstance();
Method method = helloWorld.getClass().getMethod("sayHello", null);
method.invoke(helloWorld, null);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
demo见:https://github.com/zengyh/CodeLibary/blob/master/src/clazzloader/UrlClassLoaderTest.java