同一个java类:
public class LoginAction extends BaseAction implements HttpSessionListener{
private LoginService loginService;
setLoginService()...
getLoginService()...
public String execute() throws Exception{
usdo=loginService.checkUser().... 这个loginService有值能调用checkUser(),一切正常
}
public void sessionDestroyed(HttpSessionEvent event) {
loginService.updateIsFirstLogin()....这个loginService=null然后报空指针异常;
}
}
弄不清为啥会出现这种逻辑,哪出问题,望大家指点!!!
报错:
java.lang.NullPointerException
at fmss.action.LoginAction.sessionDestroyed(LoginAction.java:743)
at org.apache.catalina.session.StandardSession.expire(StandardSession.java:806)
at org.apache.catalina.session.StandardSession.isValid(StandardSession.java:656)
at org.apache.catalina.session.ManagerBase.processExpires(ManagerBase.java:532)
at org.apache.catalina.session.ManagerBase.backgroundProcess(ManagerBase.java:517)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1352)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1530)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1519)
at java.lang.Thread.run(Unknown Source)
这个既然第一个loginService已经能获得值了,也就是说Spring注入已经成功了吧!
但为什么sessionDestroyed里的方法会为空呢?
你程序里,loginService初始实例化在哪里初始化的?
是配置文件配置进去?还是程序里初始化的?
loginService = new LoginService();这句是放在哪里?
这句如果你在execute里有,在sessionDestroyed里没有,那当然报错。
最好是将这句放到初始化方法里,init()里
你的sessionDestroyed这个方法可能没有被spring扫描到!
可以考虑把报空指针的异常栈贴出来……
已解决,目前都弄不清我们这系统通过配置注入services的逻辑,只知道注入时只注入了excute()方法里,没注入我自己添加的sessionDestroyed()方法;
不过解决了问题:定义个static 的loginService00,然后将excute()方法里的loginService传给loginService00,然后在把loginService00传给sessionDestroyed()方法的loginService;