Untuk memuatkan fail JAR baharu secara dinamik semasa aplikasi anda sedang berjalan, anda boleh memanfaatkan URLClassLoader class:
ClassLoader loader = URLClassLoader.newInstance( new URL[] { yourURL }, getClass().getClassLoader() );
Ini mencipta tika ClassLoader baharu yang merangkumi URL yang ditentukan. Anda kemudiannya boleh menggunakan pemuat kelas ini untuk memuatkan kelas daripada fail JAR:
Class<?> clazz = Class.forName("mypackage.MyClass", true, loader);
Di sini, clazz mewakili kelas yang anda muatkan daripada fail JAR.
Memuat semula kelas sedia ada semasa aplikasi anda sedang berjalan boleh menjadi lebih rumit, kerana ia mungkin memperkenalkan ketidakkonsistenan data. Walau bagaimanapun, jika perlu, anda boleh mengikuti langkah berikut:
Constructor<?> ctor = runClass.getConstructor(); Runnable doRun = (Runnable) ctor.newInstance(); doRun.run();
Pemuat kelas tidak lagi digunakan setelah utas dan objek yang berkaitan tidak lagi merujuknya. Ia kemudiannya boleh dikumpul sampah, melainkan terdapat kebocoran memori yang disebabkan oleh ThreadLocal, pemacu JDBC atau isu yang serupa.
Jika anda perlu mengekalkan data yang dikaitkan dengan objek sedia ada semasa pemuatan semula kelas, anda harus mempertimbangkan untuk menggunakan mekanisme kegigihan seperti bersiri untuk menyimpan dan memulihkan data.
Ia juga mungkin untuk menambah kelas baharu ke dalam pemuat kelas sedia ada menggunakan URLClassLoader.addURL. Walau bagaimanapun, percubaan yang gagal untuk memuatkan kelas akan menyebabkan kelas tidak pernah dimuatkan dalam contoh pemuat kelas itu.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memuatkan dan Muat Semula JAR Secara Dinamik dalam Aplikasi Java Saya pada Runtime?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!