Klassen zur Laufzeit aus Ordnern oder JARs entdecken
Stellen Sie sich ein Java-Tool vor, das in die Struktur einer Java-Anwendung eintaucht und aussagekräftige Erkenntnisse gewinnt. Um dies zu erreichen, muss das Tool .class-Dateien aus einer angegebenen Quelle (JAR/WAR oder Ordner) scannen. Anschließend wird Reflektion eingesetzt, um Klassenmethoden und ihre Attribute zu untersuchen. Diese Aufgabe hat sich jedoch als schwer zu bewältigen erwiesen.
Es gibt zahlreiche auf URLClassloader basierende Lösungen, die das Laden bestimmter Klassen aus Verzeichnissen oder Archiven ermöglichen. Allerdings scheint keiner in der Lage zu sein, Klassen zu identifizieren und zu laden, ohne vorher deren Namen oder Paketstrukturen zu kennen.
Den Kern des Problems angehen
Bei näherer Betrachtung die Herausforderung liegt nicht darin, alle Klassendateien durch rekursive Scantechniken zu erfassen, sondern vielmehr darin, Klassenobjekte für jede erkannte Datei zu erhalten.
Nutzung der Leistungsfähigkeit von JarFile und URLClassLoader
Der bereitgestellte Code nutzt Java NIO effektiv, um alle Klassen aus einer JAR-Datei zu laden, ohne dass vorherige Kenntnisse über deren Existenz erforderlich sind. Der Prozess umfasst:
Eine Alternative wird in Betracht gezogen: Javassist
Wie von Kommentatoren vorgeschlagen, bietet Javassist eine weitere praktikable Option. Durch die Initialisierung eines ClassPools vor der Schleife können Sie CtClass-Objekte erstellen, anstatt Klassen mit einem Klassenlader zu laden. CtClass-Objekte bieten Zugriff auf eine Reihe von Klassenattributen, einschließlich Methoden, Feldern, verschachtelten Klassen und mehr.
Diese umfassende Lösung gibt Entwicklern die Möglichkeit, Klassen zur Laufzeit dynamisch zu laden und zu überprüfen und bietet so eine leistungsstarke Grundlage für ausgefeilte Tools zur Codeanalyse und -manipulation.
Das obige ist der detaillierte Inhalt vonWie kann ich Java-Klassen zur Laufzeit aus JARs oder Ordnern dynamisch erkennen und prüfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!