Java 从Jar文件中动态加载类

jopen 10年前

Java: 使用Java中的ClassLoader搭配上反射功能就能实现从Jar文件中动态加载类

由于开发的需要,需要根据配置动态加载类,所以简单测试了一下JAVA动态加载类

定义接口

package loader;    public interface HelloIface {        public String hello();            public String sayHi();    }

实现接口

在其他插件类实现此接口,并导出为jar,如D:/tmp/test.jar

package loader;    public class HelloImpl implements HelloIface{     @Override   public String hello() {    return "hello,JAVA世界";   }     @Override   public String sayHi() {    return "Hi,JAVA World";   }  }

动态加载类

import java.net.URL;  import java.net.URLClassLoader;    import loader.HelloIface;    public class Main {   public static void main(String[] args) {      String classPath = "loader.HelloImpl";// Jar中的所需要加载的类的类名      String jarPath = "file:///D:/tmp/test.jar";// jar所在的文件的URL      ClassLoader cl;    try {     // 从Jar文件得到一个Class加载器     cl = new URLClassLoader(new URL[] { new URL(jarPath) });     // 从加载器中加载Class     Class<?> c = cl.loadClass(classPath);     // 从Class中实例出一个对象     HelloIface impl = (HelloIface) c.newInstance();     // 调用Jar中的类方法     System.out.println(impl.hello());     System.out.println(impl.sayHi());    } catch (Exception e) {     e.printStackTrace();    }   }  }