gpt4 book ai didi

spring - HttpSessionListener 实现内部的依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-04 13:50:00 24 4
gpt4 key购买 nike

问题:此注入(inject)的依赖项将始终从 SimpleController

返回 0
  1. 为什么在尝试对 HttpSessionListener 实现进行依赖注入(inject)时此 bean 的上下文会丢失?
  2. 这背后的原则是什么,我是否遗漏/混淆了它不起作用?
  3. 我该如何解决这个问题?

Github 上的项目 webApp project Source

考虑以下几点:

session 计数器监听器

public class SessionCounterListener implements HttpSessionListener {

@Autowired
private SessionService sessionService;

@Override
public void sessionCreated(HttpSessionEvent arg0) {
sessionService.addOne();
}

@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
sessionService.removeOne();
}
}

web.xml

<web-app ...>
<listener>
<listener-class>com.stuff.morestuff.SessionCounterListener</listener-class>
</listener>

</web-app>

applicationContext.xml

<xml ...>

<!-- Scan for my SessionService & assume it has been setup correctly by spring-->
<context:component-scan base-package="com.stuff"/>

</beans>

服务: session 服务

@Service
public class SessionService{

private int counter = 0;

public SessionService(){}

public void addOne(){
coutner++;
}

public void removeOne(){
counter--;
}

public int getTotalSessions(){
return counter;
}

}

Controller :SimpleController

@Component
public SimpleController
{
@Autowired
private SessionService sessionService;

@RequestMapping(value="/webAppStatus")
@ResponseBody
public String getWebAppStatus()
{
return "Number of sessions: "+sessionService.getTotalSessions();
}

}

最佳答案

当你声明一个 <listener>像这样在 web.xml 中

<listener>
<listener-class>com.stuff.morestuff.SessionCounterListener</listener-class>
</listener>

您是在告诉您的Servlet 容器 实例化listener-class 中指定的类元素。换句话说,这个实例不会由 Spring 管理,因此它无法注入(inject)任何东西,字段将保留为 null。 .

workarounds对此。和 some more .

注意这个

<!-- Scan for my SessionService & assume it has been setup correctly by spring-->
<context:component-scan base-package="com.stuff"/>

不是 web.xml 中的有效条目.我不知道这是否是您的复制错误。

关于spring - HttpSessionListener 实现内部的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20476760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com