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(); } } }