Menyusun dan Memuatkan Kelas Java Luaran Secara Dinamik
Banyak aplikasi memerlukan keupayaan untuk memuatkan dan melaksanakan kod secara dinamik. Ini sering dicapai dengan menyusun dan memuatkan kelas Java luaran.
JavaCompiler: Alat Serbaguna untuk Penyusunan Dinamik
Kelas JavaCompiler menyediakan antara muka yang mudah untuk menyusun kod sumber Java . Begini cara untuk menggunakannya:
Memuatkan dan Melaksanakan Kompilasi Kelas
Setelah kompilasi berjaya, kelas yang disusun boleh dimuatkan ke dalam JVM menggunakan pemuat kelas tersuai. Ini dicapai seperti berikut:
Contoh Pelaksanaan
Contoh kod berikut menunjukkan proses penyusunan dan pemuatan kelas Java secara dinamik:
import javax.tools.*; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class DynamicCompilation { public static void main(String[] args) { // Prepare the Java source file String sourceCode = "..."; // Replace this with the plugin's source code // Create the .java file File helloWorldJava = new File("HelloWorld.java"); try (FileWriter writer = new FileWriter(helloWorldJava)) { writer.write(sourceCode); } catch (IOException e) { e.printStackTrace(); return; } // Set up the JavaCompiler JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); // Set up the compilation options List<String> optionList = new ArrayList<>(); optionList.add("-classpath"); optionList.add(System.getProperty("java.class.path")); // Add the necessary classpath here // Compile the source code JavaFileObject compilationUnit = fileManager.getJavaFileObjectsFromFiles(Arrays.asList(helloWorldJava)).get(0); CompilationTask task = compiler.getTask(null, fileManager, null, optionList, null, Arrays.asList(compilationUnit)); if (!task.call()) { for (Diagnostic<?> diagnostic : task.getDiagnostics()) { System.out.println(diagnostic.getMessage(null)); } return; } // Load and execute the compiled class try { URLClassLoader classLoader = new URLClassLoader(new URL[]{new File("./").toURI().toURL()}); Class<?> loadedClass = classLoader.loadClass("HelloWorld"); Object instance = loadedClass.newInstance(); // Execute the required method on the instance // ... } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IOException e) { e.printStackTrace(); } } }
Dengan mengikuti langkah ini dan memanfaatkan kelas JavaCompiler dan URLClassLoader, anda boleh menyusun dan memuatkan luaran secara dinamik Kelas Java, membolehkan penyesuaian fleksibel dan keupayaan pemalam dalam aplikasi anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyusun dan Memuatkan Kelas Java Luaran Secara Dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!