Dalam panduan ini, kami menyelidiki selok-belok memuatkan kelas Java secara dinamik pada masa jalan, sama ada dari struktur direktori atau arkib JAR. Matlamat kami adalah untuk meneroka kaedah yang membolehkan pemeriksaan berasaskan refleksi bagi kelas ini.
Mengumpul semua fail kelas dari lokasi projek, mengekstrak maklumat kaedah dan mendapatkan cerapan melalui refleksi telah terbukti sangat mencabar. Pendekatan tradisional menggunakan URLClassLoaders mengehadkan akses kepada kelas tertentu apabila mengetahui nama atau struktur pakej mereka. Halangan ini mengehadkan keupayaan kami untuk menemui semua kelas secara menyeluruh.
Serpihan kod yang disediakan menawarkan penyelesaian komprehensif untuk memuatkan kelas secara dinamik daripada fail JAR. Ia menggabungkan rekursi untuk mencari semua fail kelas dalam arkib. Terutama, pendekatan ini tidak memerlukan pengetahuan awal tentang nama kelas:
JarFile jarFile = new JarFile(pathToJar); Enumeration<JarEntry> e = jarFile.entries(); URL[] urls = { new URL("jar:file:" + pathToJar+"!/") }; URLClassLoader cl = URLClassLoader.newInstance(urls); while (e.hasMoreElements()) { // Fetching and filtering relevant JarEntries ... // Class loading using URLClassLoader Class c = cl.loadClass(className); }
Untuk fleksibiliti yang dipertingkatkan dan akses kepada metadata kelas, perpustakaan Javassist menyediakan pilihan yang menarik . Ia memberi kuasa kepada anda untuk membina objek CtClass untuk setiap kelas yang dikenal pasti dalam serpihan kod di atas:
ClassPool cp = ClassPool.getDefault(); ... CtClass ctClass = cp.get(className);
Melalui antara muka CtClass, anda memperoleh kuasa untuk menyoal siasat butiran rumit setiap kelas, termasuk kaedah, medan, kelas bersarang dan banyak lagi.
Berbekalkan teknik ini, anda boleh meneroka struktur aplikasi Java dengan berkesan, membuka kunci cerapan berharga melalui refleksi. Sama ada anda ingin memahami perhubungan kelas, menganalisis kebergantungan kod atau melaksanakan tugas pemfaktoran semula yang terperinci, pemuatan kelas dinamik memberi anda kuasa untuk merungkai kerumitan kod Java dengan ketepatan yang tiada tandingannya.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memuatkan dan Memeriksa Semua Kelas Java secara Dinamik daripada Folder atau JAR?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!