他の人がすでに答えているように@Inject Injector
、Guiceがバインディング自体を定義しているので、単純に使用できます。
通常、アプリに必要なのは1つだけですInjector
。静的変数は、シングルトンを挿入するよりも、シングルトンを格納してアクセスするためのさらに簡単な方法です。私たちのWebアプリでは、stripes-guicerInjector
を使用し、必要なときに静的メソッドからを取得しGuiceInjectorFactory.getInjector()
ます(たとえば、Hibernateインターセプターで)。
「インジェクターを直接使うべきではない」というアドバイスに少し戸惑っています。またはを呼び出す以外に、他にどのようにインスタンスを注入できますinjector.getInstance()
かinjector.injectMembers()
?道はない。はい、プロバイダーメソッドを定義できますが、どこかで何かがインジェクターを使用しない限り、それらが呼び出されることはありません。はい、ServletModuleInjector
のようにを使用するモジュールがあります。自分で作成する必要がありますが、その後はそのままにしておくことができます。Injector
ServletModule
したがって、状況によっては、Injector
直接使用することを避けることができますが、それはあなたがそれを「使用すべきではない」という意味ではありません。オプションのモジュールを使用せずにGuiceを単独で使用している場合は、Injector
インジェクションをトリガーする他の方法がないため、あらゆる場所で使用する必要があります。(フレームワーク内でコードを1日中記述している開発者は、実際に自分のオブジェクトをインスタンス化する人がいることを忘れることがあると思います。)