ディレクトリまたは JAR 内のすべての .class ファイルのクラス オブジェクトを取得する
Java アプリケーションを分析する場合、クラスのロードと検査が重要になります。ダイナミックに。直面する一般的な課題は、プロジェクトの場所 (JAR やフォルダーを含む) からすべての .class ファイルをスキャンし、リフレクション用の Class オブジェクトを作成する方法を見つけることです。
URLClassloader の制限
多くのソリューションは URLClassloader を中心に展開しており、開発者がディレクトリまたはアーカイブから特定のクラスをロードできるようにしています。ただし、これらの手法にはクラス名またはパッケージ構造の知識が必要であり、制限される可能性があります。
解決策: JarFile スキャン
提供されている解決策は、 JarFile を使用して JAR ファイル全体をスキャンします:
JarFile jarFile = new JarFile(pathToJar); Enumeration<JarEntry> e = jarFile.entries();
ディレクトリと非 .class ファイルは無視され、有効な .class ファイルごとに:
String className = je.getName().substring(0,je.getName().length()-6); className = className.replace('/', '.'); Class c = cl.loadClass(className);
className は、 JarEntry、Class オブジェクトは URLClassLoader を使用してロードされます。
Javassist の代替
Javassist は、ClassPool から CtClass オブジェクトを作成することで代替アプローチを提供します。
ClassPool cp = ClassPool.getDefault(); CtClass ctClass = cp.get(className);
CtClass は、メソッド、フィールド、ネストされたクラスなどのさまざまなクラス メンバーへのアクセスを提供します。
これらの手法を利用することで、開発者はプロジェクトの任意の場所からクラスを動的にロードして分析できるため、次のような機能が提供されます。 Java アプリケーションに関する貴重な情報を抽出します。
以上がJava でディレクトリまたは JAR ファイルからすべてのクラスを動的にロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。