Um neue JAR-Dateien dynamisch zu laden, während Ihre Anwendung ausgeführt wird Wenn Sie ausgeführt werden, können Sie die URLClassLoader-Klasse nutzen:
ClassLoader loader = URLClassLoader.newInstance( new URL[] { yourURL }, getClass().getClassLoader() );
Dadurch wird eine neue ClassLoader-Instanz erstellt die die angegebene URL enthält. Anschließend können Sie diesen Klassenlader verwenden, um Klassen aus der JAR-Datei zu laden:
Class<?> clazz = Class.forName("mypackage.MyClass", true, loader);
Hier stellt clazz die Klasse dar, die Sie aus der JAR-Datei geladen haben.
Das Neuladen vorhandener Klassen während der Ausführung Ihrer Anwendung kann schwieriger sein, da es zu Dateninkonsistenzen führen kann. Bei Bedarf können Sie jedoch die folgenden Schritte ausführen:
Constructor<?> ctor = runClass.getConstructor(); Runnable doRun = (Runnable) ctor.newInstance(); doRun.run();
Klassenlader werden nicht mehr verwendet, sobald die zugehörigen Threads und Objekte nicht mehr auf sie verweisen. Sie können dann durch Garbage Collection gesammelt werden, es sei denn, es liegen Speicherlecks vor, die durch ThreadLocal, JDBC-Treiber oder ähnliche Probleme verursacht werden.
Wenn Sie die mit vorhandenen Objekten verknüpften Daten währenddessen beibehalten müssen Beim erneuten Laden von Klassen sollten Sie in Betracht ziehen, einen Persistenzmechanismus wie die Serialisierung zum Speichern und Wiederherstellen der Daten zu verwenden.
It Es ist auch möglich, mithilfe von URLClassLoader.addURL neue Klassen zu einem vorhandenen Klassenlader hinzuzufügen. Fehlgeschlagene Versuche, eine Klasse zu laden, führen jedoch dazu, dass die Klasse nie in dieser Klassenlader-Instanz geladen wird.
Das obige ist der detaillierte Inhalt vonWie kann ich JARs in meiner Java-Anwendung zur Laufzeit dynamisch laden und neu laden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!