Guice DI フレームワークは初めてです。Spring では、el を使用してセッション スコープ変数にアクセスできます。
sessionScope['scopedTarget.sessionService'].loggedUser
しかし、どうすればこれをGuiceで行うことができますか?
Guice のサーブレット拡張を使用することを選択した場合、HttpSession または Provider<HttpSession> を自動的にバインドできるはずです。
クラスでは、次のようなものを配置します。
private final MyDependency dependency;
private final Provider<HttpSession> sessionProvider;
@Inject
public MyClass(MyDependency dependency, Provider<HttpSession> sessionProvider) {
this.dependency = dependency;
this.sessionProvider = sessionProvider;
}
void callMyService() {
HttpSession session = sessionProvider.get();
String myValue = (String) session.get("value");
// ...
}
プロバイダーは、インジェクターから新しいインスタンスを取得できる組み込みインターフェースです。クラス Foo がバインドされている場合は、追加作業なしでいつでも Provider<Foo> を注入できます。ここでは、作成しているクラスが特定のセッションよりも長く存続する可能性があるため、プロバイダーを注入することをお勧めします。