Можно ли при использовании расширения сервлета guice реагировать на разрушение сервлета?

Я должен сделать некоторую очистку, когда сервлет guice удален. Можно ли подключиться к уничтожению сервлета при использовании сервлета guice? Мне нужно использовать Инжектор для очистки.

Я могу переопределить contextDestroyed метод в GuiceServletContextListener, но тогда как мне получить доступ к инжектору?

Есть ли лучший способ реагировать на разрушение сервлета?

1 ответ

Я могу переопределить метод contextDestroyed в GuiceServletContextListener, но тогда как мне получить доступ к инжектору?

Вы можете сделать это так:

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());      
    }
}
Другие вопросы по тегам