6

Puisque ServletContextListener est créé par le serveur, pas par Guice je ne trouve pas de moyen de le faire fonctionner ensemble. Comment puis-je obtenir injecteur de guice à ServletContextListener?Injecter des dépendances à ServletContextListener avec Guice

Peut-être y at-il un meilleur moyen d'arrêter des services tels que le logger ou la persistance puis de le faire à la méthode contextDestroyed et de les initialiser à contextInitialized?

Répondre

7

L'extension GuiceServlet met l'injecteur dans le contexte de servlet, vous pouvez l'obtenir en faisant quelque chose comme ceci:

public class MyServletContextListener implements ServletContextListener { 

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

Vous pouvez le faire facilement à l'extension classe GuiceServletContextListener. Voici un exemple:

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

ici MyGuiceModule est un GuiceModule normal et ServletModule est un servlet un. Alors qu'il n'y a pas de méthode principale dans Servlet-Container, vous devez remettre votre module au conteneur Servlet. De cette façon, guice pourrait gérer vos modules d'injection normaux dans un conteneur de servlet.

Questions connexes