Question

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?

Était-ce utile?

La solution

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

Autres conseils

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top