2011-09-15 8 views
1

自分のクラスローダーを使用して、場所からいくつかのクラスをロードしています。アプリケーションのユーザーは、この場所にjarファイルを追加できます。これらのjarファイルにあるすべてのクラスをロードします。これらのクラスのリテラルオブジェクトを特定のクラスのフィールドであるHashMapに保持し、必要に応じてインスタンスを作成します。このHashMapからいくつかのクラスリテラルが削除された場合、クラスを追加しているユーザーのためにクラスをアンロードする必要があるように、そのクラスリテラルのインスタンスを作成することができます。 2)私は、私が読み込んだすべてのクラスリテラルを持っているhashMApで操作するコードをユーザが使用しないようにしたい。Java Reflection

答えて

0

私は反射との適切な経験を持っていなかったが、私はことをお勧めすることは以下の通りです:

は、インスタンス化のすべてのインスタンスのレコードを含むクラス(LoadedClassesManagerを、言う)を持ちます。また、観測可能なパターン(イベントリスナーに応答)を実装する必要があります。

ロードされたクラスのすべてのインスタンス化を、LoadedClassManagerのメソッド呼び出し(getNewInstance(Class clazz, params)のようなもの)によって呼び出すようにする。このメソッドは、呼び出し元オブジェクトをリスナーとして登録します(クラスがアンロードされたとき)。

クラスがアンロードされるとき、イベントリスナーのevenハンドラは、クラスのアンロードを適切に処理するためにLoadedClassesManagerによって呼び出されます。

+0

返信用のThnx。 しかし、ここでは2つの懸念があります。 1)コードを使用してクラスをアンロードすることはできますか(メモリからアンロードするか、またはそれを非マークにするように設定することができます) 2)私のコードはすべてのユーザーに公開されているので、クラス内でLoadedClassManagerを使用することもできます彼らは私のアプリケーションに追加しています。私もこれを防止したいです。 – Chandan

+0

あなたの最初の懸念についてここで答えを見てください:http://stackoverflow.com/questions/148681/unloading-classes-in-java – WaelJ

+0

あなたの2番目のポイントとして、私はあなたが何を意味するのかよく分かりません。ユーザーのコードはソースコードを変更できるので、コードは開いていますか? – WaelJ