問題タブ [serviceloader]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
157 参照

java - モジュールをロードするJavaのサービスローダーですが、ロードされたビューを適切に表示できます

したがって、私のアプリケーションには、IModule を実装するすべてのクラスをロードするメイン プロジェクトがあります。各モジュールには、AbstractView を拡張するビューがあります。サンプルコードはこちら

単純化された例ですが、それはほとんどどのように機能するかです。私の問題は、プラグインビューを表示できないことです。なぜそれが機能しないのかわかりません。ロードされたビューを印刷すると、その AbstractView をレイアウトのタイプなどのプロパティで拡張したクラスが取得されます。UI とは関係のないインターフェイスを実装したクラスには問題がないようです。それぞれの jar ファイルを含むフォルダーからプラグインをロードします。

編集

META-INF/services には、テキスト plugin.Plugin を含む app.IModule ファイルしかありません。プラグイン クラスは、IModule を実装したクラスです。これは、サービス ローダーがロードするクラスであるため、私が宣言した唯一のサービスです。AbstractView を拡張するクラスも宣言する必要がありますか? サービスローダーに読み込まなくても

0 投票する
1 に答える
456 参照

java - ServiceLoader + EJB インジェクション

ServiceLoaderJava EE 6 から EJB とインジェクションを組み合わせることができるかどうか知りたいです。

2 つの EJB ステートレス BeanとServiceIによって実装できるインターフェースがあるとします。BeanABeanB

これら 2 つのクラスを に登録するMEAT-INF/servicesと、( を使用する場合のように) アプリケーション コンテナによって管理されるのではなく、Java SE の方法でインスタンス化されます@Inject。これは、@Injectまたはのような注釈@PostConstructが解決されないことを意味します。

ServiceLoader特定のインターフェイスを実装し、いくつかの基準に基づいてインターフェイスを返す EJB Bean を通過できるようにするようなものを持つことは可能ですか?

0 投票する
1 に答える
2043 参照

java - Spring には ServiceLoader の類似物があり、その使用方法はありますか?

ServiceLoader標準 SDK の API の一部であるクラスの Spring 類似物があるかどうかを調べようとしています。そのようなクラスがある場合、どのように使用されますか?

お知らせ下さい!

0 投票する
1 に答える
55 参照

java - それ自体を追加する必要があるプロバイダーのコンポーネントを使用するコンポジットを作成する方法は?

タイトルは少し複雑かもしれませんが、問題を言語化する他の方法は見当たりませんでした。

私は、いくつかのファイルをロードしてJavaコンポーネントに変換することで特定のコンポーネントを初期化するプロジェクトに取り組んでいます.他のものは、すでにJavaクラスとして存在しているため、ServiceLoaderによってロードされます. これらのオブジェクトはすべてプロバイダーによってマップされ、そこから取得できるようになります。

いくつかのコンポーネントを Java に直接追加しようとしていますが、それらは以前にプロバイダーにロードされたコンポーネントを使用することを意味する複合的なものです。したがって、プロバイダーから必要なコンポーネントを収集し、それらをコンポジットに追加して、コンポジット自体をプロバイダーに追加する必要があります。

コンポジットは、特定の META-INF ファイルに追加するだけでプロバイダに追加できます。次に、ServiceLoader によって処理されます。

私にとって、これはどういうわけか循環依存です。META-INF ファイルで、ServiceLoader によってどの Java クラスを収集する必要があるかを定義する必要があります。これには、新しく実装されたコンポジットも含まれます。ただし、他のすべてのメトリックがプロバイダーによってロードされている限り、そのメトリックを作成することはできません。

その問題を解決するために使用できるパターンまたは別のアプローチはありますか?

0 投票する
1 に答える
193 参照

eclipse - Service Loader 構成ファイルが適切に展開されない

だから私はEclipseでwebappを書いていて、私のクラスの1つでサービスローダーを使いたいと思っています。問題は、META-INF/services のものをどこに置くかです。ここから(https://stackoverflow.com/a/3421191/2742995)私は見つけました:

しかし、理想的な方法は、プラグインの jar ファイルに含めることです。たとえば、プラグインが WEB-INF/lib/myplugin.jar としてバンドルされていて、プラグイン クラスが com.example.plugin.MyPlugin の場合、jar は次の構造を持つ必要があります。

だから私はサービスローダーのものを含むモジュールに持っています、ソース: src/main/java/ を含む

  1. vcs.validation.* (ソースコードを含む)
  2. フォルダ: META-INF/services/vcs.validation.javatests.JavaTest 以下を含む:

    • Test1 (vcs.validation.javatests.Test1 を読み取ります) および
    • Test2 (vcs.validation.javatests.Test2 を読み取ります)

(インターフェイス vcs.validation.javatests.JavaTest には、Test1 と Test2 の 2 つの実装クラスがあります)

ただし、webapp 全体を war としてパッケージ化し、tomcat にデプロイすると、web-app/WEB-INF/classes/ フォルダーに META-INF/services/ が含まれません。ここで何が間違っていますか?

0 投票する
4 に答える
5843 参照

java - Java では、ServiceLoader を使用してロードされたサービスをどのようにモックできますか?

このようなコードを持つレガシーJavaアプリケーションがあります

そして、このコードで使用する SomeInterface のモック実装を提供したいと考えています。私は mockito モッキングフレームワークを使用しています。

残念ながら、レガシー コードを変更することはできず、何も静的に追加したくありません (たとえば、META-INF への追加など)。

テスト内からこれを行う簡単な方法はありますか。テストの実行時?