2

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

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

我的应用程序有一些组件需要分别在初始化和销毁​​ servlet 上下文时进行初始化和销毁​​。一些示例是缓存管理器、从 3rd 方 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();
    }
}

还有其他选择吗?

4

0 回答 0