Guice を使用して、既存の Java Web アプリケーションのサーブレット部分にプロバイダーを挿入することに成功しましたが、アプリケーションのビジネス レイヤー (サーブレット以外の Java クラス) を介してインジェクターにアクセスできません。
Injecting the Injector について読んだことがありますが、私にはそれはハックのように思えます。
私の質問は、サーブレット/フィルター以外のクラスが、GuiceServletContextListener を拡張するために使用するクラスで作成されたインジェクターにアクセスできるように、Java Web アプリをどこでブートストラップすればよいかということだと思います。インジェクターを注入せずにこれらのクラスを注入可能にする方法はありますか?
ありがとうございます。説明が必要な場合はお知らせください。
編集:
これまでのところ、サーブレットで単純なロガーを使用してこれを実行しようとしています。
@Inject
private static org.slf4j.Logger log;
インジェクションは MyLoggerModule で次のように設定されます (これは ServletModule を使用した createInjector 呼び出しにあります)。
@Override
public void configure() {
bindListener(Matchers.any(), new SLF4JTypeListener()); // I
built my own SLF4JTypeListener...
}
これはすべてサーブレットで完全に機能しますが、サーブレットまたはフィルターではないクラスによって呼び出された場合、フィールド注入は機能しません。