問題タブ [guice-3]
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.
java - Guice の AssistedInject ファクトリをサービス ローダーと一緒に使用するには?
私のguiceモジュールには、以下に示すような複数のファクトリがあります:
両方のファクトリには、支援された要素を取る次の create メソッドがあります。
CarChooser クラスでは、以下に示すように Ferrari または Mercedes のインスタンスを取得します。
同じクラスの中で:
今、私がしようとしているのは、この CarChooser クラスを拡張用に開いているが、変更用に閉じていることです。つまり、別の Factory を追加する必要がある場合、それを変数として宣言し、コンストラクターに追加し、対応する新しい型に別の if 句を追加する必要はありません。ここで ServiceLoader を使用し、すべてのファクトリ (FerrariFactory、MercedesFactory など) によって実装されるインターフェイス CarFactory を宣言し、すべての実装に getCarType メソッドを含めることを計画していました。しかし、Service Loader を使用して create メソッドを呼び出すにはどうすればよいでしょうか?
それが機能する場合は正しい方法です(これが機能するかどうかさえわかりません)。または、同じことを行うより良い方法はありますか?
投稿に対する最初のコメントのおかげで、 MapBinder を使用したいことがわかりました。FerrariFactory と MercedesFactory の両方で拡張された CarFactory を作成しました。だから私は以下を追加します:
しかし、上記のコードの .to 部分は抽象クラスであるため、FerrariFactory がどの実装にもバインドされていないという初期化エラーが発生します。FactoryModuleBuilder で宣言された正しい Assisted Inject Factory にバインドするには、ここで何が必要ですか?
java - 実行時にフィルターの順序を取得する
私は Tomcat を使用していますが、一般的な方法 (サーブレット 3.0) を使用したいと考えています。
web.xml にいくつかの構成済みフィルターがあり、そのうちの 1 つが GuiceFilter です。GuiceFilter は少しいじめっ子です...一度実行されると、リクエストを飲み込み、進行中のフィルターを呼び出すことはありません。このようにして、Guice の後にフィルターを実行することはできません。web.xml の代わりに guice ですべてのフィルターを定義できますが、これは一部のフィルターでは機能しません: "Tomcat WebSocket (JSR356) フィルター"最後のものではなく最初のものですが、GuiceFilterの前またはその中で実行する必要があります。
登録されているすべてのフィルターを取得して、guice に追加する方法を見つけました。
しかし、この方法では、いくつかのフィルター (Guice 1 の前のもの) を 2 回実行します (通常のフィルター チェーンと Guice 1)。
フィルターの順序を取得する方法はありますか? (だから私はguiceの後にのみ追加することができます)
または、別の方法: 通常のチェーンからフィルターを削除して、guice のみを残す方法はありますか (他のすべてのフィルターを guice 自体に移動します)。
scala - Akka Actors と play フレームワークで WebService を使用する
Play と Akka を使用して Web サービスを構築しましたが、Web サービスがクライアントである別の Web サービスを統合する必要があります。
私のデフォルトのコントローラ(関連付けられたルートファイルを含む)は次のようになります
これにより、大規模なアクター システムがスピンアップし、すべてがうまくいきます。
アクターの 1 つは以下のように定義されています -
私の問題は、このアクターから新しい Web サービスを呼び出す必要があることです。この Web サービスは、このアクターからの結果を記録するデータベースです。
私は(特に)からの指示を見て、それに従いました
上記の手順に従って、アクセスする必要があるクラスに WSClient を挿入することになっています。
以下のように、2 番目のコントローラーへの依存性注入を解決できます。
これは機能し、ルート ファイルでマップされている URL にアクセスして「投稿」アクションを実行し、Web サービスにアクセスできます。また、現在、2つのコントローラーがあります。
私の問題は、ActorMgr (Akka アクター) から Web サービス コントローラーの "post" メソッドにアクセスすることです。どうすれば有効にできますか?
java - AWS Lambda での Google Guice の統合
Google Guice を AWS Lambda に統合しようとしていますが、何らかの理由でインジェクションがうまく機能しません。電話しようとするたびにnullになります
ハンドラー コード:
ユーザーサービス
UserServiceImpl
バインディング クラス:
テスト クラス:
何らかの理由で、UserService userService は FirstLamdba で null として設定されます。
何か案が?
java - Guice - アシスト付きインジェクション ファクトリによって作成されたインスタンスのバインド
コンストラクターが次のようなクラス A があるとします。
AFactory があります。
したがって、AI のインスタンスを作成するには、明らかに次のようなことを行う必要があります。
しかし、たとえば、タイプAのメンバーを持つクラスB、クラスC、クラスDなど、他のクラスがあるとしましょう(フィールドインジェクションを使用しますが、ctorにすることもできます):
そして、A の同じインスタンスがそれらのクラスに注入されることを望みます。ただし、A の別のインスタンスを他のクラス (クラス E と F としましょう) に挿入するオプションがまだあります。
それを行う正しい方法は何ですか?私はそれを行うためのきれいな方法を考えることはできません。
dependency-injection - Guice 3.0 のデフォルト プロバイダーの実装
私はプロジェクトで Guice を使用しており、デフォルトの注入されたプロバイダーがどのように機能するかを理解しようとしています。マニュアルの「Injecting Providers」セクション ( https://github.com/google/guice/wiki/InjectingProviders ) には、次の簡単な例があります。
さて、私が知りたいのは、processorProvider.get() と transactionLogProvider.get() のデフォルトの実装が正確に何をするかです。
例えば:
- 常にCreditCardProcessor/TransactionLog の新しいインスタンスを作成する
- オブジェクトのプールを使用する
- 何か他の..
現在、プロジェクトで奇妙な動作が発生しているため、これを尋ねています。これは、デフォルトのプロバイダーが何らかのキャッシュ戦略を使用している場合に説明される可能性があります..
ありがとう