mvc inyeccion ejemplo dependencias context autowire anotaciones annotation spring servlets dependency-injection httpsession servlet-listeners

inyeccion - ¿Cómo inyectar dependencias en HttpSessionListener, usando Spring?



spring core ejemplo (3)

Con Spring 4.0 pero también funciona con 3, implementé el ejemplo que se detalla a continuación, escuchando ApplicationListener<InteractiveAuthenticationSuccessEvent> e inyectando HttpSession https://stackoverflow.com/a/19795352/2213375

¿Cómo inyectar dependencias en HttpSessionListener, usando Spring y sin llamadas, como context.getBean("foo-bar") ?


Dado que Servlet 3.0 ServletContext tiene un método "addListener", en lugar de agregar su oyente en su archivo web.xml, puede agregarlo a través del siguiente código:

@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"); } } }

lo que significa que puede inyectar normalmente en "MyHttpSessionListener" y con esto, simplemente la presencia del bean en el contexto de la aplicación hará que el oyente se registre en el contenedor


Puede declarar su HttpSessionListener como un bean en el contexto de Spring, y registrar un proxy de delegación como un oyente real en web.xml , algo como esto:

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); } ... }