【问题标题】:When using the guice servlet extension is it possible to react to servlet destruction?使用 guice servlet 扩展时,是否可以对 servlet 破坏做出反应?
【发布时间】:2026-02-25 00:25:01
【问题描述】:

当 guice servlet 被删除时,我需要做一些清理工作。使用 guice servlet 时是否可以挂钩到 servlet 破坏?我需要使用 Injector 进行清理工作。

我可以覆盖GuiceServletContextListener 中的contextDestroyed 方法,但是如何访问注入器?

有没有更好的方法来应对 servlet 破坏?

【问题讨论】:

    标签: guice guice-servlet


    【解决方案1】:

    我可以覆盖 GuiceServletContextListener 中的 contextDestroyed 方法,但是如何访问注入器?

    你可以这样做:

    public class MyGuiceServletConfig extends GuiceServletContextListener {
        private final Injector injector = Guice.createInjector(new ServletModule());
    
        @Override
        protected Injector getInjector() {
            return injector;
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent servletContextEvent) {
            injector.getInstance(MyCleanUp.class);      
        }
    }
    

    或者像这样:

    public class MyGuiceServletConfig extends GuiceServletContextListener {
    
        @Override
        protected Injector getInjector() {
            return Guice.createInjector(new ServletModule());
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent sce) {
            Injector injector = (Injector) sce.getServletContext()
                                              .getAttribute(Injector.class.getName());      
        }
    }
    

    【讨论】:

      最近更新 更多