0

現在、この行を使用してサードパーティの JAR をロードし、そのパッケージ/クラスをプログラムに追加しています

URL [] urls = new URL [] { "http://..." };
new URLClassLoader(urls);

このアプローチの問題点は、JAR 全体が読み込まれることです。つまり、すべてのパッケージとすべてのクラスがインポートされます。選択したいくつかのクラスのみをロードするように URLClassLoaded に指示するにはどうすればよいですか?

例は、次のような JAR 階層です。

  • パッケージA
    • クラス1
    • クラス2
  • パッケージB
    • クラス1
    • クラス2
    • クラス3
    • クラス4

「A.* と B.class2 のみをインポート」のようなことをしたい

4

1 に答える 1

1

ClassLoaderのカスタム実装を提供します。

クラスローダーのメソッドをオーバーライドしfindClass()、ロードするクラスを選択するビジネス ロジックを適用します。

class CustomClassLoader extends ClassLoader {

         public Class findClass(String name) {
             if(shouldBeLoaded)
                return defineClass(name, b, 0, b.length);
         }
    }

これをロード用のデフォルトのクラスローダーとして設定する (オプション)

java -Djava.system.class.loader
    =com.test.CustomClassLoader
于 2013-08-31T14:55:17.663 に答える