Вы можете написать DelegatingHttpSessionListenerProxy
аналогичным образом, что каркас DelegatingFilterProxy
.
Например (очень простой и не тестируется)
public class DelegatingHttpSessionListenerProxy implements HttpSessionListener {
private HttpSessionListener delegate;
private WebApplicationContext wac;
@Override
public void sessionCreated(HttpSessionEvent event) {
if (wac == null) {
wac = findWebApplicationContext(event);
}
if (wac != null) {
delegate = wac.getBean(HttpSessionListener.class);
delegate.sessionCreated(event);
}
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
if (wac == null) {
wac = findWebApplicationContext(event);
}
if (wac != null) {
delegate = wac.getBean(HttpSessionListener.class);
delegate.sessionDestroyed(event);
}
}
protected WebApplicationContext findWebApplicationContext(HttpSessionEvent event) {
return WebApplicationContextUtils.getWebApplicationContext(event.getSession().getServletContext());
}
Затем зарегистрировать прокси в web.xml и управлять реальной реализации в контексте приложения.
Контейнер управляет сеансами http, поэтому весна не должна иметь никакой руки. –