java如何通过类加载器加载类和jar包

来源:互联网 发布:淘宝 产品对比 违规 编辑:程序博客网 时间:2024/06/09 17:12

场景:

        把项目中要用到的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 blocke1.printStackTrace();}}}


demo见:https://github.com/zengyh/CodeLibary/blob/master/src/clazzloader/UrlClassLoaderTest.java