問題タブ [guice]

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 に答える
493 参照

java - GinModuleAdapterを使用したGINアプリケーションでのGrapherの使用

GINプロジェクトでGrapherを使おうとしています。しかし、InjectorGrapherを提供するためにインジェクターを作成しようとしても機能していません。

私のコードの最初の行で:

でクラッシュします

何が得られますか?

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

java - Guiceインジェクションをテストするにはどうすればよいですか?

私はGoogleGuiceにオブジェクトの配線の責任を与えました。しかし、バインディングがうまく機能しているかどうかをテストするにはどうすればよいですか?

たとえばA、依存関係を持つクラスがあるとしBます。Bが正しく注入されていることをどのようにテストできますか?

Aメソッドがないことに注意してください。メソッドがないgetB()ことを表明したいと思います。A.bnull

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

java - アプリケーション サーバーで本番環境の Google Guice に使用する正しいステージはどれですか?

奇妙な質問のように思えますが (当然の答えは Production でしょう)、Java ドキュメントを読むと、次のようになります。

アプリケーションサーバーへのステートレス呼び出しがあるシナリオを想定すると、最初の受信メソッド (またはその付近) は呼び出しごとに新しいインジェクターを作成します。特定の呼び出しですべてのモジュール バインディングが必要ない場合は、Development ステージ (デフォルト) を使用し、パフォーマンス ヒットを前もって使用しない方がよいように思われます。 、そしてここでの「事前」と「ランタイムパフォーマンス」の違いは、1回の呼び出しであるため、意味がありません。

もちろん、これの欠点は、エラー チェックが失われ、潜在的なコード パスが予期せず問題を引き起こす可能性があることです。

質問は要約すると、上記の仮定は正しいですか? インジェクターの指定された有効期間が 1 回の呼び出しである場合、モジュールの大規模なセットでパフォーマンスを節約できますか?

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

scope - 非スレッド ベースの Guice カスタム スコープを作成するにはどうすればよいですか?

すべての Guice のすぐに使用できる Scope 実装は、本質的にスレッドベース (またはスレッドを完全に無視) のようです。

Scopes.SINGLETONそしてScopes.NO_SCOPEスレッドを無視し、エッジケースです:グローバルスコープとスコープなし。

ServletScopes.REQUEST最終的には、ServletScopes.SESSIONからのスコープ オブジェクトの取得に依存しますThreadLocal<Context>。検索された は、名前付き属性として格納されたスコープ オブジェクトへの参照を保持するContextへの参照HttpServletRequestを保持します (名前は から派生しcom.google.inject.Keyます)。

SimpleScopeカスタム スコープ Guice wiki のクラスも、ThreadLocal<Map<Key<?>, Object>>メンバー変数を使用してスレッドごとの実装を提供します。

その序文で、私の質問は次のとおりです。非スレッドベースのスコープを作成するにはどうすればよいですか? に渡されるのは aと aだけであるため、 a を検索するために使用できる何かMap<Key<?>, Object>が欠落しているようです。Scope.scope()Key<T>Provider<T>

お時間をいただきありがとうございます。

0 投票する
5 に答える
3285 参照

java - Java コンストラクターからインスタンス メソッドを呼び出すのは良い習慣ですか、それとも悪い習慣ですか?

複雑なオブジェクト (注入された依存関係と注入されたメンバーのセットアップが必要) を初期化する方法はいくつかありますが、どれも合理的に見えますが、さまざまな長所と短所があります。具体例を挙げます。

ご覧のとおり、コンストラクターは、インスタンス メソッドの呼び出しを含む 3 つのことを行います。コンストラクターからインスタンス メソッドを呼び出すと、初期化されていないメンバーに対するコンパイラーのチェックが回避されるため、安全ではないと言われました。doSomething(0)つまり、 を設定する前に呼び出した可能性がありますthis.dependency。これはコンパイルされますが、機能しません。これをリファクタリングする最良の方法は何ですか?

  1. 静的doSomethingにして依存関係を明示的に渡しますか? 私の実際のケースでは、3 つのインスタンス メソッドと 3 つのメンバー フィールドがあり、これらはすべて相互に依存しているため、これら 3 つすべてを静的にするには、余分な定型句がたくさんあるように思えます。

  2. addHandleranddoSomething@Inject public void init()メソッドに移動します。Guice での使用は透過的ですが、手動で構築して確実に呼び出すinit()必要があります。そうしないと、誰かが忘れた場合にオブジェクトが完全に機能しなくなります。また、これはより多くの API を公開しますが、どちらも悪い考えのようです。

  3. ネストされたクラスをラップして依存関係を維持し、追加の API を公開せずに適切に動作するようにします。

    これはすべてのコンストラクターからインスタンス メソッドを引き出しますが、クラスの追加レイヤーを生成します。既に内部クラスと匿名クラス (そのハンドラーなど) がある場合、混乱する可能性があります。これを試したときにDependencyManager、別のファイルに移動するように言われました。 1 つのことを複数のファイルで行うようになったため、これも不快です。

では、この種の状況に対処するための好ましい方法は何ですか?

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

android - Guice を使用して依存関係を Android アクティビティのコンストラクターに挿入する

Guice を使用して Android のアクティビティのコンストラクターに依存関係を挿入する方法を知っている人はいますか? プラットフォームが新しいインスタンスを簡単に作成できるように、通常、アクティビティにはデフォルトのコンストラクターしかないようです。シングルトンでインジェクターを参照して依存関係を取得するのは簡単ですが、クリーンではなく、静的な状態が少し発生します。

助言がありますか?

0 投票する
9 に答える
1164 参照

java - 依存性注入を実現するための最も最小限の方法は何ですか?

私は Spring について読んでいて、EJB に比べてそれほど複雑ではないと言われていますが、理解するのに苦労しています。Spring アプローチを採用するよりも、依存性注入を達成するためのより最小限の方法はありますか?

0 投票する
5 に答える
755 参照

java - DI フレームワークを使用するプロジェクトでは、'new' 演算子を使用しないでください。

私は依存性注入に頭を悩ませようとしています。

私が混乱していることの 1 つは、すべてのオブジェクトのインスタンス化を DI フレームワーク (Spring、Guice など) で制御する必要があるかどうかです。

または、そうでない場合、どのオブジェクトがフレームワークによってインスタンス化され、どのオブジェクトがnewオペレーターによってインスタンス化されるかをどのように判断しますか?

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

java - Guice を使用したジェネリックの注入

小さなプロジェクトを移行して、いくつかの工場を Guice に置き換えようとしています (これは私の最初の Guice トライアルです)。ただし、ジェネリックを注入しようとすると行き詰まります。2 つのクラスと 1 つのモジュールを使用して、小さなおもちゃの例を抽出することができました。

この例を実行すると、得られるのは次のとおりです。

スレッド「メイン」com.google.inject.CreationException の例外: Guice 作成エラー:

エラーメッセージを探してみましたが、役立つヒントは見つかりませんでした。Guice FAQ のさらに先で、ジェネリックを注入する方法に関する質問に出くわしました。configureメソッドに次のバインディングを追加しようとしました。

しかし成功しません(同じエラーメッセージ)。

誰かがエラーメッセージを説明し、ヒントを教えてもらえますか? ありがとう。

0 投票する
3 に答える
907 参照

java - Java パッケージ スキャナー - 指定されたインターフェイスを持つすべてのクラスを検索します

C# では、特定のアセンブリからすべてのクラスを簡単に読み取ることができます。

Javaで同等の機能を探しています。これは、EJB Bean を Guice モジュールに自動的にバインドするために必要です。