同一个action类里同一个services在不同方法里一个正常获取一个为null

同一个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;