如何使用Guice在Web应用程序中启动/停止服务

时间:2014-11-12 13:40:16

标签: java servlets guice servlet-filters guice-servlet

我正在构建一个Web应用程序,并且我使用Guice Servlet扩展来引导所有内容。

根据我找到的用户指南和示例,我的web.xml有一个扩展GuiceServletContextListener的侦听器。在我的听众中,我按照here所述创建我的注射器。

我的应用程序有一些组件需要在分别初始化和销毁​​servlet上下文时进行初始化和销毁​​。一些示例是缓存管理器,从第三方API获取数据的客户端,访问Cassandra商店的客户端等。

我试图找到正确的位置来初始化/销毁这些组件。如果没有Guice,我可能会直接在我的上下文监听器中这样做,但似乎Guice并没有提升它。

我所看到的是为每个服务使用servlet过滤器。通过在每个过滤器中实现init / destroy,我可以启动和停止每个服务。但是,如果我没有实际的过滤操作,这似乎只是为了挂钩servlet生命周期:

@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();
    }
}

还有其他选择吗?

0 个答案:

没有答案