Pregunta

Since ServletContextListener is created by the server, not by Guice I can't find a way to make it work together. How do I get guice injector at ServletContextListener?

Maybe there is better way to shutdown services like logger or persistance then doing it at contextDestroyed method and initialize them at contextInitialized?

¿Fue útil?

Solución

The extension GuiceServlet puts the injector in the servlet context, so you can get it by doing something like this:

public class MyServletContextListener implements ServletContextListener {

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        Injector injector = (Injector) sce.getServletContext()
                                          .getAttribute(Injector.class.getName());      
    }
}

Otros consejos

You can do it easily with extending GuiceServletContextListener class. Here is an example:

public class MyServletConfig extends GuiceServletContextListener {
    @Override
    protected Injector getInjector() {
        return Guice.createInjector(new MyGuiceModule(), new MyGuiceServletModule());
    }
}

Here MyGuiceModule is a normal GuiceModule and ServletModule is a servlet one. Whereas there is no main method in Servlet-Container, you should hand your module to Servlet container. That way guice could manage your normal Injection modules in a servlet container.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top