70 votes

Comment ajouter un hook à l'événement d'initialisation du contexte d'application?

Pour un servlet normal, je suppose que vous pourriez déclarer un écouteur de contexte , mais pour Spring MVC, Spring faciliterait-il cela?

De plus, si je définis un écouteur de contexte et que j'aurais ensuite besoin d'accéder aux beans définis dans mon servlet.xml ou applicationContext.xml , comment pourrais-je y accéder?

106voto

Bogdan Points 7227

Le printemps a certains événements standard que vous pouvez manipuler.

Pour ce faire, vous devez créer et enregistrer un haricot qui implémente l' ApplicationListener interface, quelque chose comme ceci:

package test.pack.age;

import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;

public class ApplicationListenerBean implements ApplicationListener {

    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        if (event instanceof ContextRefreshedEvent) {
            ApplicationContext applicationContext = ((ContextRefreshedEvent) event).getApplicationContext();
            // now you can do applicationContext.getBean(...)
            // ...
        }
    }
}

Vous enregistrez ensuite ce bean dans votre servlet.xml ou applicationContext.xml le fichier:

<bean id="eventListenerBean" class="test.pack.age.ApplicationListenerBean" />

et le Printemps en informera lorsque le contexte de l'application est initialisé.

Au Printemps 3 (si vous utilisez cette version), l' ApplicationListener classe est générique et vous pouvez déclarer le type d'événement qui vous intéresse, et l'événement sera filtré en conséquence. Vous pouvez simplifier un peu de votre bean code comme ceci:

public class ApplicationListenerBean implements ApplicationListener<ContextRefreshedEvent> {

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        ApplicationContext applicationContext = event.getApplicationContext();
        // now you can do applicationContext.getBean(...)
        // ...
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X