2

ユーザーが実装したクラスを使用できるアプリケーションを実装したいと思います。各クラスは、私がインターフェースを定義するインターフェースを実装する必要があり、最後に、ユーザーによって実装されたすべてのクラスがjarファイルにアーカイブされます。ユーザーはjarファイルをクラスパスにコピーしてから、アプリケーションにjarファイル名のみを指定します。私のアプリケーションは、jarファイルを動的にロードできるはずです。これを行うには、この投稿が非常に便利であることがわかりましたが、クラス名でクラスをロードします。親に基づいてクラスをロードしたい。

public class A implements iA {
    @Override
    int getAValue() { ... }
}

public class B implements iB {
     @Override
     int getBValue() { ... }
}

ロードされたjarファイルにABクラスの両方があるとします。インターフェイス名Bを知ってクラスからインスタンスを取得したい。iB

私は何をすべきか?

4

1 に答える 1

4

この投稿をチェックしてください:インターフェースを実装する Java クラスを見つける

それはあなたが望むものへの解決策について話します。

私が提案しようとしていることが最も簡単な方法ではないことは承知していますが、Java のプラグイン アーキテクチャの基本的なユース ケースの 1 つと OSGi のサクセス ストーリーについて説明しました。

Apache Felix のような軽いものを使用して、ユーザーが提供する jar に単純な osgi.BundleActivator を実装し、インターフェースの実装を OSGi サービスとして登録することをお勧めします。(これは単なる派手なハッシュ マップであり、REST サービスなどとは関係ありません)。

次に、特定のインターフェイスのすべての実装を取得できます。そのかなり簡単です。ここで Felix のドキュメントを確認できます: http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html

于 2012-02-24T15:15:56.123 に答える