Domanda

Come iniettare le dipendenze in HttpSessionListener, utilizzando primavera e senza chiamate, come context.getBean("foo-bar")?

È stato utile?

Soluzione

Dato che il ServletContext Servlet 3.0 ha un metodo "addListener", invece di aggiungere il vostro ascoltatore nel file web.xml è possibile aggiungere tramite il codice in questo modo:

@Component
public class MyHttpSessionListener implements javax.servlet.http.HttpSessionListener, ApplicationContextAware {

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if (applicationContext instanceof WebApplicationContext) {
            ((WebApplicationContext) applicationContext).getServletContext().addListener(this);
        } else {
            //Either throw an exception or fail gracefully, up to you
            throw new RuntimeException("Must be inside a web application context");
        }
    }           
}

che significa che è possibile iniettare normalmente nella "MyHttpSessionListener" e con questo, è sufficiente la presenza del fagiolo nel vostro contesto di applicazione causerà l'ascoltatore da registrare con il contenitore

Altri suggerimenti

È possibile dichiarare il vostro HttpSessionListener come un fagiolo nel contesto primavera, e registrare un proxy delega come ascoltatore reale in web.xml, qualcosa di simile:

public class DelegationListener implements HttpSessionListener {
    public void sessionCreated(HttpSessionEvent se) {
        ApplicationContext context = 
            WebApplicationContextUtils.getWebApplicationContext(
                se.getSession().getServletContext()
            );

        HttpSessionListener target = 
            context.getBean("myListener", HttpSessionListener.class);
        target.sessionCreated(se);
    }

    ...
}

Con Spring 4.0, ma funziona anche con 3, ho implementato l'esempio descritto di seguito, l'ascolto di ApplicationListener<InteractiveAuthenticationSuccessEvent> e iniettare la HttpSession href="https://stackoverflow.com/a/19795352/2213375"> https: // stackoverflow.com/a/19795352/2213375

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top