gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:20:14 25 4
gpt4 key购买 nike

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

  1. 为什么在尝试将依赖项注入(inject)到 HttpSessionListener 实现中时,该 Bean 的上下文会丢失?
  2. 我是否遗漏/困惑了这背后的原则是什么,导致它不起作用?
  3. 如何解决这个问题?

Github 上的项目 webApp project Source

考虑以下因素:

SessionCounterListener

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>

服务:SessionService

@Service
public class SessionService{

private int counter = 0;

public SessionService(){}

public void addOne(){
coutner++;
}

public void removeOne(){
counter--;
}

public int getTotalSessions(){
return counter;
}

}

Controller :简单 Controller

@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/44999592/

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