2

特定のインターフェース、たとえばinterfaceAを継承する、JVMで現在実行されているすべてのインスタンスを見つける方法を探しています。私が最初に受け取った提案は、

Lookup.getDefault().lookupAll(interfaceA.class);

@ServiceProvider(service=interfaceA.class)

interfaceAを実装するクラスの定義の前。私はこれが実際にinterfaceAを実装するクラスを見つけることを発見しました。ただし、Lookupは、Javaリフレクションを使用してそのクラスの新しいインスタンスを提供してくれると確信しています。私の最大の問題は、Netbeansプロジェクトに導入できるライブラリが限られていることです。そうしないと、前の質問でこれに答えることができます。

そのような動物は純粋なJavaまたは非常によく知られているライブラリに存在しますか?

ありがとう

4

1 に答える 1

1

番号。Javaは必要に応じてクラスを動的にロードするため、JVMで使用可能なすべてのクラスを実際に「列挙」することはできません。これを行うために使用されるメカニズムのほとんどは、すべてのサブクラスをパス上のどこかに (xml ファイル、プロパティ ファイル) 事前にリストし、それを使用するか、何らかのコンテナーによる何らかのランタイム処理 (@ServiceProvider アノテーション) のためにそれらをマークすることを含みます。 . Java EE、Spring、および Guice はよく知られているコンテナーですが、そのようなコードはそのようなコンテナーの外では機能しません。

クラスパス上のすべての jar を反復しようとするコードも見ましたが、そのようなコードは非常に壊れやすく、通常、実行中の特定の環境に結び付けられています。

于 2013-03-14T18:06:00.977 に答える