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