我想创建一个会话范围的bean来监视HTTP会话的激活和钝化。豆是非常简单的:未实例化会话范围的bean
package my.log;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;
import org.apache.log4j.Logger;
public class SessionLoggingListenerBean implements HttpSessionActivationListener {
private final Logger LOG = Logger.getLogger(this.getClass());
public SessionLoggingListenerBean() {
LOG.info("SessionLoggingListenerBean starting");
}
public void init() {
LOG.info("SessionLoggingListenerBean init");
}
public void sessionDidActivate(HttpSessionEvent event) {
LOG.info("Session " + event.getSession().getId() + " activated");
}
public void sessionWillPassivate(HttpSessionEvent event) {
LOG.info("Session " + event.getSession().getId() + " will passivate");
}
}
豆定义在应用程序上下文:
<bean id="sessionLoggingListenerBean" class="my.log.SessionLoggingListenerBean" scope="session" init-method="init" lazy-init="false"/>
根据该结构没有从这个类日志,甚至从构造或init()方法。显然,Spring不创建这个bean。
通过试验和错误我检查到Spring在另一个bean需要它的时候实例化了这样一个bean,例如,由UI使用。有没有其他(更好)的方法?这是Spring的错误吗? 使用的春天版本:2.0.8。
感谢您的回答。由于我的Spring太老,我无法使用WebApplicationInitializer。我会尝试其他选项。 – pkalinow