Frage

Wie injizieren Abhängigkeiten in Httpsessionlistener, mit Spring und ohne Anrufe, wie context.getBean("foo-bar")?

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top