同一個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()裡