我正在构建一个 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();
}
}
还有其他选择吗?