5 Stimmen

Java-Paket-Scanner - findet alle Klassen mit einer bestimmten Schnittstelle

In C# können Sie ganz einfach alle Klassen aus einer bestimmten Assembly lesen.

Ich suche nach einer entsprechenden Funktion in Java. Ich brauche dies, um EJB Beans automatisch an mein Guice Modul zu binden.

4voto

Grzegorz Oledzki Punkte 22253

Leider scheint es in Java keine gebrauchsfertige Lösung zu geben.

In unserem Projekt haben wir einen leicht modifizierten Ansatz verwendet, der von irgendein Blog . Die dort beschriebene Lösung besteht darin, das Dateisystem und die JARs nach Klassen zu durchsuchen.

Wenn Sie nur Klassen auswählen möchten, die eine bestimmte Schnittstelle implementieren, können Sie eine zusätzliche Prüfung durchführen, z. B. clazz.isAssignableFrom(MyInterface.class) .

2voto

Michael Borgwardt Punkte 334642

Das Java-Äquivalent einer Assembly ist eine JAR-Datei; der Inhalt einer JAR-Datei kann durch die Verwendung der Klassen in java.util.jar .

Es gibt keinen allgemeineren Mechanismus (wie z.B. alle Klassen in einem Paket zu erhalten), da der Java-Klassenlademechanismus sehr flexibel ist und Dinge wie über HTTP geladene oder on the fly generierte Klassen zulässt, so dass es unmöglich ist, alle verfügbaren Klassen zu kennen.

0voto

Jeremy Chone Punkte 2921

Hier ist eine, http://grepcode.com/file/repo1.maven.org/maven2/com.metapossum/metapossum-scanner/1.0.1/com/metapossum/utils/scanner/PackageScanner.java

Wir haben es in unserem Lightweight Java Framework, Snow, eingesetzt, und es funktioniert hervorragend.

Der Maven ist wie

<dependency>
   <groupId>com.metapossum</groupId>
   <artifactId>metapossum-scanner</artifactId>
   <version>1.0.1</version>
</dependency>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X