問題タブ [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.
java - GinModuleAdapterを使用したGINアプリケーションでのGrapherの使用
GINプロジェクトでGrapherを使おうとしています。しかし、InjectorGrapherを提供するためにインジェクターを作成しようとしても機能していません。
私のコードの最初の行で:
でクラッシュします
何が得られますか?
java - Guiceインジェクションをテストするにはどうすればよいですか?
私はGoogleGuiceにオブジェクトの配線の責任を与えました。しかし、バインディングがうまく機能しているかどうかをテストするにはどうすればよいですか?
たとえばA
、依存関係を持つクラスがあるとしB
ます。Bが正しく注入されていることをどのようにテストできますか?
A
メソッドがないことに注意してください。メソッドがないgetB()
ことを表明したいと思います。A.b
null
java - アプリケーション サーバーで本番環境の Google Guice に使用する正しいステージはどれですか?
奇妙な質問のように思えますが (当然の答えは Production でしょう)、Java ドキュメントを読むと、次のようになります。
アプリケーションサーバーへのステートレス呼び出しがあるシナリオを想定すると、最初の受信メソッド (またはその付近) は呼び出しごとに新しいインジェクターを作成します。特定の呼び出しですべてのモジュール バインディングが必要ない場合は、Development ステージ (デフォルト) を使用し、パフォーマンス ヒットを前もって使用しない方がよいように思われます。 、そしてここでの「事前」と「ランタイムパフォーマンス」の違いは、1回の呼び出しであるため、意味がありません。
もちろん、これの欠点は、エラー チェックが失われ、潜在的なコード パスが予期せず問題を引き起こす可能性があることです。
質問は要約すると、上記の仮定は正しいですか? インジェクターの指定された有効期間が 1 回の呼び出しである場合、モジュールの大規模なセットでパフォーマンスを節約できますか?
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>
お時間をいただきありがとうございます。
java - Java コンストラクターからインスタンス メソッドを呼び出すのは良い習慣ですか、それとも悪い習慣ですか?
複雑なオブジェクト (注入された依存関係と注入されたメンバーのセットアップが必要) を初期化する方法はいくつかありますが、どれも合理的に見えますが、さまざまな長所と短所があります。具体例を挙げます。
ご覧のとおり、コンストラクターは、インスタンス メソッドの呼び出しを含む 3 つのことを行います。コンストラクターからインスタンス メソッドを呼び出すと、初期化されていないメンバーに対するコンパイラーのチェックが回避されるため、安全ではないと言われました。doSomething(0)
つまり、 を設定する前に呼び出した可能性がありますthis.dependency
。これはコンパイルされますが、機能しません。これをリファクタリングする最良の方法は何ですか?
静的
doSomething
にして依存関係を明示的に渡しますか? 私の実際のケースでは、3 つのインスタンス メソッドと 3 つのメンバー フィールドがあり、これらはすべて相互に依存しているため、これら 3 つすべてを静的にするには、余分な定型句がたくさんあるように思えます。addHandler
anddoSomething
を@Inject public void init()
メソッドに移動します。Guice での使用は透過的ですが、手動で構築して確実に呼び出すinit()
必要があります。そうしないと、誰かが忘れた場合にオブジェクトが完全に機能しなくなります。また、これはより多くの API を公開しますが、どちらも悪い考えのようです。ネストされたクラスをラップして依存関係を維持し、追加の API を公開せずに適切に動作するようにします。
これはすべてのコンストラクターからインスタンス メソッドを引き出しますが、クラスの追加レイヤーを生成します。既に内部クラスと匿名クラス (そのハンドラーなど) がある場合、混乱する可能性があります。これを試したときにDependencyManager
、別のファイルに移動するように言われました。 1 つのことを複数のファイルで行うようになったため、これも不快です。
では、この種の状況に対処するための好ましい方法は何ですか?
android - Guice を使用して依存関係を Android アクティビティのコンストラクターに挿入する
Guice を使用して Android のアクティビティのコンストラクターに依存関係を挿入する方法を知っている人はいますか? プラットフォームが新しいインスタンスを簡単に作成できるように、通常、アクティビティにはデフォルトのコンストラクターしかないようです。シングルトンでインジェクターを参照して依存関係を取得するのは簡単ですが、クリーンではなく、静的な状態が少し発生します。
助言がありますか?
java - 依存性注入を実現するための最も最小限の方法は何ですか?
私は Spring について読んでいて、EJB に比べてそれほど複雑ではないと言われていますが、理解するのに苦労しています。Spring アプローチを採用するよりも、依存性注入を達成するためのより最小限の方法はありますか?
java - DI フレームワークを使用するプロジェクトでは、'new' 演算子を使用しないでください。
私は依存性注入に頭を悩ませようとしています。
私が混乱していることの 1 つは、すべてのオブジェクトのインスタンス化を DI フレームワーク (Spring、Guice など) で制御する必要があるかどうかです。
または、そうでない場合、どのオブジェクトがフレームワークによってインスタンス化され、どのオブジェクトがnew
オペレーターによってインスタンス化されるかをどのように判断しますか?
java - Guice を使用したジェネリックの注入
小さなプロジェクトを移行して、いくつかの工場を Guice に置き換えようとしています (これは私の最初の Guice トライアルです)。ただし、ジェネリックを注入しようとすると行き詰まります。2 つのクラスと 1 つのモジュールを使用して、小さなおもちゃの例を抽出することができました。
この例を実行すると、得られるのは次のとおりです。
スレッド「メイン」com.google.inject.CreationException の例外: Guice 作成エラー:
エラーメッセージを探してみましたが、役立つヒントは見つかりませんでした。Guice FAQ のさらに先で、ジェネリックを注入する方法に関する質問に出くわしました。configure
メソッドに次のバインディングを追加しようとしました。
しかし成功しません(同じエラーメッセージ)。
誰かがエラーメッセージを説明し、ヒントを教えてもらえますか? ありがとう。
java - Java パッケージ スキャナー - 指定されたインターフェイスを持つすべてのクラスを検索します
C# では、特定のアセンブリからすべてのクラスを簡単に読み取ることができます。
Javaで同等の機能を探しています。これは、EJB Bean を Guice モジュールに自動的にバインドするために必要です。