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?
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());
}
}
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With