0

サーブレットリクエストスコープを使用して提供される依存関係を注入するビジネスクラスがいくつかあります。

問題は、サーブレット要求よりも長く存続するいくつかのスレッドでその bussines クラスを使用したいということです。それを行う最も透明な方法は何ですか?

4

4 に答える 4

0

さて、私はあなたの問題を理解できるかどうかわかりません。アーキテクチャ自体に問題があると思いますが、これはあなたを助けることができます:

Guiceモジュール

bind(Bussines.class).annotatedWith(Names.named("request")).to(Bussines.class).in(RequestScoped.class);
bind(Bussines.class).annotatedWith(Names.named("session")).to(Bussines.class).in(SessionScoped.class);
bind(Bussines.class).annotatedWith(Names.named("application")).to(Bussines.class).asEagerSingleton();

使用法

    @Inject @Named("request")
    private Bussines bussines; //inject a new bussines class every request

    @Inject @Named("session")
    private Bussines bussines; //inject a new bussines class each session
//This is little bit tricky, cuz Bussines is stored in session. In Stage.PRODUCTION are all injection created eagerly and there is no session at injection time. Session binding should be done in lazy way - inject provider and call bussinesProvider.get() when em is needed;

    @Inject @Named("application")
    private Bussines bussines; //inject singleton

また、プライベート モジュールを使用して、さまざまなスコープ オブジェクトをクラスにバインドすることもできます。公開することを忘れないでください。

于 2013-08-12T11:00:09.567 に答える