public class SessionCounter implements HttpSessionListener {
    //session创建时执行
    @Override
    public void sessionCreated(HttpSessionEvent se) {
    }    //session销毁时执行
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
//        System.out.println("+++++++++++++==========");
        UserResult userResult = (UserResult) se.getSession().getAttribute("sessionResult");
        System.out.println(userResult.getId());
        ServletContext sc = se.getSession().getServletContext();
        ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(sc);
//        ApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(sc);        LoginService loginService = applicationContext.getBean(LoginService.class);
        loginService.exit(userResult);
    }}这个是我百度如何在listener中调用service的方法是debug之后发现applicationContext 的值为null,执行System.out.println(userResult.getId())之后 ,不执行 loginService.exit(userResult)的方法,请问如何解决,我用的spring是注解方式

解决方案 »

  1.   

    报错没???LoginService可以从spring中得到吗???
      

  2.   

    不知道怎么就好使了。。
    @Component
    public class SessionCounter implements HttpSessionListener ,ApplicationContextAware {    private static ApplicationContext applicationContext;    public void setApplicationContext(ApplicationContext arg0)
                throws BeansException {
            applicationContext = arg0;
        }    public static ApplicationContext getApplicationContext(){
            
            return applicationContext;
        }    //session创建时执行
        @Override
        public void sessionCreated(HttpSessionEvent se) {}    //session销毁时执行
        @Override
        public void sessionDestroyed(HttpSessionEvent se) {
            UserResult userResult = (UserResult) se.getSession().getAttribute("sessionResult");
    //        ServletContext sc = se.getSession().getServletContext();
    //        applicationContext = WebApplicationContextUtils.getWebApplicationContext(sc);//applicationContext为null
            applicationContext=getApplicationContext();
            LoginService loginService = applicationContext.getBean(LoginService.class);
    //        LoginService loginService=new LoginServiceImpl(); //LoginDao为null
            loginService.exit(userResult);
        }
    }