1

別のjarファイルでインターフェースの実装を利用したいシステムがあります。シナリオは、クライアントが私たちの作業を消費し、デフォルトの実装をオーバーライドするために独自の実装を提供することです。

問題は、実際の実装クラスをシステムにバインド/ワイヤリングするための最良の方法は何ですか?

1つの方法は、依存関係をスプリングワイヤすることです。すべてのクライアントがSpringを使用していないため、現在はオプションではありません。

リフレクションを使用してインターフェイス実装クラスを解決するなど、いくつかのオプションを検討しました。このソリューションにはあまり満足していません。

もう1つの古き良きオプションは、プロパティの1つでクラス名を構成し、クライアントに構成させることです。よさそうだ。

しかし、可能であれば、いくつかのエレガントなオプションを見つけたいと思いました。

また、SLF4J / ELが実装を自動的に解決する方法についてのアイデアはありますか?

4

2 に答える 2

1

SPI (Service Provider Interface)を使用することをお勧めします。特定のサービスの利用可能なすべての実装を列挙するファイルを作成する必要があります。これは面倒かもしれません。幸いなことに、この作業を行うオープン ソース ライブラリを使用できます: http://code.google.com/p/spi/

于 2012-08-30T15:43:51.100 に答える
0

おそらく、反射ライブラリが探しているものです。

Reflections はクラスパスをスキャンし、メタデータのインデックスを作成し、実行時にクエリを実行できるようにし、プロジェクト内の多くのモジュールについてその情報を保存および収集できます。

Reflections を使用すると、次のようなメタデータを照会できます。

  • あるタイプのすべてのサブタイプを取得する
  • 注釈パラメーターが一致しない、何らかの注釈で注釈が付けられたすべての型/メソッド/フィールドを取得します
  • 正規表現に一致するすべてのリソースを取得します
于 2012-08-30T16:23:29.480 に答える