ホームページ > Java > &#&チュートリアル > 実行時に Java アプリケーションで JAR を動的にロードおよび再ロードするにはどうすればよいですか?

実行時に Java アプリケーションで JAR を動的にロードおよび再ロードするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-27 13:31:11
オリジナル
1003 人が閲覧しました

How Can I Dynamically Load and Reload JARs in My Java Application at Runtime?

ランタイム コード拡張の JAR を動的にロードおよび再ロードする方法

実行時に新しい JAR をロードする

アプリケーションの実行中に新しい JAR ファイルを動的にロードするには実行すると、URLClassLoader を利用できます。 class:

ClassLoader loader = URLClassLoader.newInstance(
    new URL[] { yourURL },
    getClass().getClassLoader()
);
ログイン後にコピー

これにより、指定された URL を含む新しい ClassLoader インスタンスが作成されます。次に、このクラス ローダーを使用して、JAR ファイルからクラスをロードできます。

Class<?> clazz = Class.forName("mypackage.MyClass", true, loader);
ログイン後にコピー

ここで、clazz は、JAR ファイルからロードしたクラスを表します。

既存のクラスの再ロード

アプリケーションの実行中に既存のクラスを再ロードすることは、データの不整合が生じる可能性があるため、より困難になる可能性があります。ただし、必要に応じて、次の手順を実行できます。

Constructor<?> ctor = runClass.getConstructor();
Runnable doRun = (Runnable) ctor.newInstance();
doRun.run();
ログイン後にコピー

クラス ローダーのガベージ コレクション

クラス ローダーは、関連付けられたスレッドとオブジェクトが参照しなくなると使用されなくなります。 ThreadLocal、JDBC ドライバー、または同様の問題によるメモリ リークがない限り、それらはガベージ コレクションされる可能性があります。

永続データの処理

実行中に既存のオブジェクトに関連付けられたデータを保存する必要がある場合は、クラスをリロードする場合は、シリアル化などの永続化メカニズムを使用してデータを保存および復元することを検討する必要があります。

クラス ローダー拡張機能

URLClassLoader.addURL を使用して、既存のクラス ローダーに新しいクラスを追加することもできます。ただし、クラスのロードに失敗すると、クラスはそのクラス ローダー インスタンスにロードされなくなります。

以上が実行時に Java アプリケーションで JAR を動的にロードおよび再ロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート