【问题标题】:HttpSessionListener in Google Guice web applicationGoogle Guice Web 应用程序中的 HttpSessionListener
【发布时间】:2012-09-25 23:13:45
【问题描述】:
【问题讨论】:
标签:
java
servlets
dependency-injection
guice
servlet-listeners
【解决方案1】:
没有添加会话侦听器的“Guice 方式”。可悲的是。但是从会话监听器访问 servlet 上下文没有问题。
注册会话监听器:
public class MyServletConfig extends GuiceServletContextListener {
private Injector injector;
@Override
public void contextInitialized(final ServletContextEvent servletContextEvent) {
injector = Guice.createInjector(new MyAppModule());
registerSessionListeners(servletContextEvent.getServletContext(), injector);
super.contextInitialized(servletContextEvent);
}
private void registerSessionListeners(final ServletContext servletContext, final Injector injector) {
servletContext.addListener(injector.getInstance(WebsocketCloser.class));
}
@Override
protected Injector getInjector() {
return injector;
}
}
访问 servlet 上下文是会话监听器:
public class WebsocketCloser implements HttpSessionListener {
@Override
public void sessionCreated(final HttpSessionEvent httpSessionEvent) {
// no-op
}
@Override
public void sessionDestroyed(final HttpSessionEvent httpSessionEvent) {
// do cleanup: httpSessionEvent.getSession().getServletContext();
}
}