このガイドでは、実行時に Java クラスを動的にロードする複雑さを掘り下げます。ディレクトリ構造または JAR アーカイブ。私たちの目標は、これらのクラスのリフレクション ベースの検査を可能にするメソッドを探索することです。
プロジェクトの場所からすべてのクラス ファイルを収集し、メソッド情報を抽出し、洞察を得る反省を通して行うことは特に困難であることが判明しました。 URLClassLoader を使用する従来のアプローチでは、名前またはパッケージ構造がわかっている場合に特定のクラスへのアクセスを制限します。この障害により、すべてのクラスを包括的に検出する能力が制限されます。
提供されたコード フラグメントは、JAR ファイルからクラスを動的にロードするための包括的なソリューションを提供します。アーカイブ内のすべてのクラス ファイルを検索するための再帰が組み込まれています。特に、このアプローチではクラス名の事前知識は必要ありません。
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); }
柔軟性を強化し、クラス メタデータへのアクセスを実現するために、Javassist ライブラリには魅力的なオプションが用意されています。 。これにより、上記のコード部分で特定されたクラスごとに CtClass オブジェクトを構築できるようになります。
ClassPool cp = ClassPool.getDefault(); ... CtClass ctClass = cp.get(className);
CtClass インターフェイスを通じて、メソッド、フィールド、
これらのテクニックを活用すると、Java アプリケーションの構造を効果的に調査し、リフレクションを通じて貴重な洞察を得ることができます。クラスの関係を理解する場合でも、コードの依存関係を分析する場合でも、複雑なリファクタリング タスクを実行する場合でも、動的なクラスの読み込みにより、比類のない精度で Java コードの複雑さを解明できます。
以上がフォルダーまたは JAR からすべての Java クラスを動的にロードして検査するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。