1

Java プロセスでオブジェクトを作成および構成するために、Bean スクリプト フレームワークを介して rhino を使用しています。スクリプトで使用される一部のクラスは、常に標準のクラスパスにあるとは限らないため、動的にロードする必要があります。

これらのクラスをロードするために、補助ディレクトリからこれらのクラスをロードするカスタム クラス ローダーを使用して、スクリプト フレームワークのコンテキスト ファクトリを初期化します。これはうまくいきます。

問題は、これらのクラスの一部がコンストラクターで、この補助ディレクトリからロードする必要がある他のクラスを使用することです。ソースを見ると、JavaScript エンジンは単に Constructor.newInstance を呼び出しているだけであることがわかります。

newInstance 呼び出しがどのクラスローダーを使用するかを知るにはどうすればよいですか? また、独自のクラスローダーを挿入して、標準のクラスローダーがロード方法を知らないクラスを手動でロードできるようにすることはできますか?

4

2 に答える 2

1

クラスローダーの親クラスローダーをアプリケーションクラスローダーに設定してみてください。

ClassLoader myLoader = new ClassLoader(getClass().getClassLoader()) { 
... your code loading from custom directory ...
}

ローダーからロードされたクラスは、ローダーを使用して他のクラスを検索するため、ローダーはそれらを提供する必要があります(親に委任することにより)

于 2009-10-30T18:19:53.557 に答える
0

Constructor.newInstance特定の によってロードされたConstructor特定のインスタンスに属するインスタンスで動作します。クラスは、独自のクラス ローダーを介してリンクします。ClassClassLoader

単一引数Class.forNameは、直接の呼び出し元のクラス ローダーを使用します (これは非常にいたずらな API です)。

于 2009-10-30T18:25:22.233 に答える