インターフェイスを動的に実装する新しいJARをプラグインするにはどうすればよいですか?


7

背景:自分や他の開発者が実装するインターフェースの開発に取り組んでいます。このインターフェイスにより、ユーザーは新しい機能コードをシステムに「プラグイン」して、新たに使用することができます。この新しいコードは、すでに実行中のサーバー/アプリケーションから呼び出されます。(TLDR:オンザフライでアプリケーションにプラグインをインストールする機能を開発する必要があります)

これまでにインターフェースで行ったすべての作業は、内部コーディングの目的で行われており、外部に公開されることはありません。ユーザーが新しいコード実装インターフェースをプラグインできるようにするために私が考えることができる唯一の方法は、ユーザーが実装クラスを含むJARファイルをフックし、何らかの方法でそのクラスシグネチャを呼び出し用に定義することです。これは以前に行われたことのように思えますが、私はコーディングの側面に触れたことはありません。

サーバー/アプリケーションの実行時に新しいJavaコードのこのプラグインを許可するために使用できるフレームワークはありますか?私は以前にAPIを使用したことがありますが、より多くのWebサービスでは、コアインターフェイスを「実装」せずにサービスを消費している場所を明らかにします。

参考までに、メインアプリケーションにSpringを使用してJavaバックエンドを使用しています。



@EsbenSkovPedersenが私をうさぎの穴に導いてくれて、結局私に必要なものすべて、そしていくつかのものを与えてくれました。どうもありがとうございました。(-admins:重複、閉じるのは私自身で問題ありません)
Walls

@Wallsの複製は同じサイトにある必要があります。SOに同様の質問があるからといって、これが重複しているという意味ではありません。回答はコメントよりも永続的であるため、この質問の回答で見つけたものを要約し、SOの質問にリンクできます。

回答:


5

Stack Overflowの関連する投稿を調べたところ、「プラグイン」スタイルの開発を行うためのさまざまなツールが自由に使えることがわかりました。

まず、私は「API」に近かったのですが、正しい解決策は「SPI」またはサービスプロバイダーインターフェイスです。Stack Overflowの違い説明する非常に良い投稿を見つけました。要約すると:APIは、目標を達成するために呼び出しおよび使用するクラス/インターフェース/メソッドのセットです。目標を達成するために拡張および実装するクラス/インターフェース/メソッドのセットであるSPIと比較します。

私にとって適切な解決策を見つけるために私がまだ検討している方法はたくさんありますが、Javaを使用するか、ClassLoaderそれURLClassLoaderが今後の道のようです。Oracleは、これをここに実装する方法についての優れたチュートリアルを提供しています

Apache AriesOSGiなど、これをサポートできるツールは数多くあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.