2

私は Web アプリケーションを構築しており、Guice Servlet 拡張機能を使用してすべてをブートストラップしています。

私が見つけたユーザーガイドと例に従って、 myweb.xmlには を拡張する単一のリスナーがありますGuiceServletContextListenerリスナーで、ここで説明されているようにインジェクターを作成します。

私のアプリには、サーブレットコンテキストがそれぞれ初期化および破棄されるときに、初期化および破棄する必要があるいくつかのコンポーネントがあります。例としては、キャッシュ マネージャー、サードパーティ API からデータを取得するクライアント、Cassandra ストアにアクセスするクライアントなどがあります。

これらのコンポーネントを初期化/破棄する適切な場所を見つけようとしています。Guice がなければ、おそらくコンテキスト リスナーで直接それを行うでしょうが、Guice はそれを促進しないようです。

私が見たのは、サービスごとにサーブレット フィルターを使用していることです。各フィルターに init/destroy を実装することで、各サービスを開始および停止できます。ただし、実際にフィルタリングする必要がない場合、サーブレットのライフサイクルにフックするだけではやり過ぎのように思えます。

@Singleton
public final class MyServiceFilter implements Filter {
    private final MyService service;

    @Inject
    public MyServiceFilter(MyService service) {
        this.service = service;
    }

    @Override
    public void init(FilterConfig filterConfig) {
        service.start();
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
        service.stop();
    }
}

他のオプションはありますか?

4

0 に答える 0