Wie Abhängigkeiten in Httpsessionlistener zu injizieren, Frühling verwenden?
-
19-09-2019 - |
Frage
Wie injizieren Abhängigkeiten in Httpsessionlistener, mit Spring und ohne Anrufe, wie context.getBean("foo-bar")
?
Lösung
Da die Servlet 3.0 ServletContext eine „addListener“ -Methode hat, statt Ihre Zuhörer in der web.xml-Datei hinzufügen Sie durch den Code hinzufügen könnte etwa so:
@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");
}
}
}
, was bedeutet, können Sie in der Regel in den „MyHttpSessionListener“ injizieren und damit, einfach die Anwesenheit der Bohne in Ihrem Anwendungskontext bewirkt, dass der Hörer registriert wird mit dem Behälter
Andere Tipps
Sie können Ihre HttpSessionListener
als Bohne im Frühjahr Kontext erklären, und eine Delegation Proxy als tatsächliche Zuhörer in web.xml
registrieren, so etwas wie folgt aus:
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);
}
...
}
With Spring 4.0, sondern auch mit 3 arbeitet, implementiert ich das Beispiel unten beschrieben, zu ApplicationListener<InteractiveAuthenticationSuccessEvent>
hören und Einspritzen des HttpSession
https: // stackoverflow.com/a/19795352/2213375