【发布时间】:2013-12-30 21:34:47
【问题描述】:
我想创建一个会话范围的 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 定义:
<bean id="sessionLoggingListenerBean" class="my.log.SessionLoggingListenerBean" scope="session" init-method="init" lazy-init="false"/>
有了这个配置,这个类就没有日志,即使是构造函数或 init() 方法。显然,Spring 没有创建这个 bean。
通过反复试验,我检查了 Spring 在另一个 bean 需要它时实例化了这样一个 bean,例如由 UI 使用。还有其他(更好的)方法吗?这是Spring中的错误吗?
使用的 Spring 版本:2.0.8。
【问题讨论】:
标签: java spring session servlets