2012-05-31 9 views
7

最近、私はJavaのカスタムクラスローダーAPIを利用しました。私はここで1つの使用を見つけました。kamranzafar's blog 私はクラスローダーの概念を少し熟知しています。誰かが詳細に説明することができますか、それが必要な場合や使用する必要がある場合はどうなりますか?カスタムクラスローダーの使用方法

+0

カスタムクラスローダーの作成に適した記事です。 http://www.journaldev.com/349/java-classloader –

答えて

22

カスタムクラスローダーは、いくつかのモジュール/アプリケーションで構成されるより大きなアーキテクチャで役に立ちます。ここでは、カスタムクラスローダの利点は、次のとおりです。

  • はモジュラーアーキテクチャはモジュラー型アーキテクチャを許可する複数のクラスローダを定義できます。
  • 矛盾の回避クラスローダー内のクラスのスコープを明確に定義します。
  • サポートバージョン管理同じVM内の異なるバージョンのモジュールを異なるモジュールでサポートします。
  • メモリ管理の改善未使用のモジュールを削除して、そのモジュールが使用するクラスをアンロードし、メモリをクリーンアップします。
  • どこからでもクラスをロードするクラスはどこからでもロードすることができます。データベース、ネットワーク、さらにはをオンザフライで定義することもできます。
  • 動的にリソースまたはクラスを追加する上記のすべての機能を使用すると、クラスまたはリソースを動的に追加できます。
  • ランタイムリロード変更クラス変更されたクラスを含む実際のクラスローダーへの子クラスローダを作成することによって、クラスまたはクラスランタイムをリロードすることができます。
+3

どこからでもクラスをロードする興味深い(クールな)例がここにあります:http://99-bottles-of-beer.net/language- java-1162.html – Crollster

+0

@Ramesh PVKあなたの説明に感謝します。あなたが何を記述しているかを理解するためのいくつかのサンプルコードを提供することができれば、本当に素晴らしいです。あなたがjavaに興味を持っている私たちのようにそれをすることを願っています。 –

11

主な用途はアプリケーションサーバーであり、2つのアプリケーションを実行でき、クラスが競合しないようにします。すなわち、アプリケーション1がアプリケーション2と同じ名前のクラスを有する場合、カスタムクラスローダアプリケーション1はそのクラスをロードし、アプリケーション2はそのクラスをロードする。

また、クラスがカスタムクラスローダーによってロードされている場合、そのクラスをJVMからアンロードすることもできます。アプリケーションサーバーでも便利です。

もう1つの用途は、アスペクト指向プログラミングを行う方法の1つで、またはいくつかの永続性APIを使用するときです。カスタムクラスローダーを使用すると、実行中のアプリケーションに渡される前に、ロードされたクラスに動作を追加できます。

2

Javaクラスローダーは、名前が示唆しているものとほとんど同じです。クラスをメモリにロードして使用できるようにします。

クラスは、それらをロードしたClassLoaderともリンクされています。

カスタムクラスローダーは、したがって、興味深い可能性の多様開く:

  • 異なるクラスローダーと同じクラスの複数のバージョンをロードを動的に
  • ロードとアンロードのクラス(例えば、可能な例のためのバージョン管理confictsを解決するために)実行時に
  • 新しいクラスを生成するClojureのようなJVM言語は通常のクラスローダを心配する必要はありません非標準のソース

通常のJavaアプリケーションから実行時にClojureの関数)

  • ロードクラスを表すために、新しいコンパイル済みのクラスを生成するために、さまざまなクラスローディングのトリックを使用します。しかし、他のコードをホストする必要があるフレームワークやプラットフォームを作成している場合、それらはもっと重要な/関連性が高くなります。

  • 関連する問題