在应用程序运行时动态加载新的 JAR 文件运行时,您可以利用 URLClassLoader 类:
ClassLoader loader = URLClassLoader.newInstance( new URL[] { yourURL }, getClass().getClassLoader() );
这会创建一个新的包含指定 URL 的 ClassLoader 实例。然后,您可以使用此类加载器从 JAR 文件加载类:
Class<?> clazz = Class.forName("mypackage.MyClass", true, loader);
这里,clazz 代表您从 JAR 文件加载的类。
在应用程序运行时重新加载现有类可能会比较棘手,因为它可能会导致数据不一致。但是,如果有必要,您可以按照以下步骤操作:
Constructor<?> ctor = runClass.getConstructor(); Runnable doRun = (Runnable) ctor.newInstance(); doRun.run();
一旦关联的线程和对象不再引用它们,就不再使用类加载器。然后可以对它们进行垃圾收集,除非存在由 ThreadLocal、JDBC 驱动程序或类似问题引起的内存泄漏。
如果您需要在处理过程中保留与现有对象关联的数据类重新加载时,您应该考虑使用序列化等持久化机制来存储和恢复数据。
还可以使用 URLClassLoader.addURL 将新类添加到现有的类加载器中。但是,尝试加载类失败将导致该类永远不会加载到该类加载器实例中。
以上是如何在运行时动态加载和重新加载 Java 应用程序中的 JAR?的详细内容。更多信息请关注PHP中文网其他相关文章!