2

アプリケーションのクラスパスに 1 つの jar ファイルがあります。実行時に、新しいクラスを jar ファイルに追加し、場合によっては既存のクラスのフィールド/メソッドも変更します。現在、URLClassLoader を使用してクラスを動的にロードしています。動的に追加された新しいクラスは正しくロードされ、実行時に使用できます。ただし、実行時に変更された既存のクラスを再読み込みできません。一度ロードされたクラスは、クラスへのすべての参照が破棄されるまでリロードされないため、リロードを明示的に処理する必要があると述べている多くの記事を読みました。また、見つけたサンプル コードを試してみましたが、どれも機能しませんでした。

誰かがリロードの適切なアプローチを提案できますか? 同じためのサンプルコードは高く評価されます。

4

2 に答える 2

4

通常、クラスをリロードするには、クラス ローダー全体をアンロードする必要があります。つまり、そのクラス ローダー用にロードされたすべてのクラスへのすべての参照を削除します。

もう 1 つのオプションは、インストルメンテーションを使用して既存のクラスのバイト コードを変更することです。通常、これには制限があり、フィールドの変更はできません。つまり、そのタイプのオブジェクトは何らかの方法で変換する必要があります。

私が通常行っていることは、非常に迅速に開始/再起動できるサービスを提供することです。Runこのようにして、理想的には IDE でを押すことで、更新されたコードが必要なプロセスを簡単に再起動できます。これにより、展開時間も最小限に抑えられます。

于 2013-01-31T09:29:05.337 に答える