2009-11-15 7 views
6

Y a-t-il des crochets dans le processus de chargement Spring ApplicationContext?Printemps applicationcontext chargement des crochets

Je veux exécuter un morceau de code juste avant le chargement du contexte de l'application (avant que les beans/properties/aspects/etc ... ne soient instanciés).

merci à l'avance

Répondre

6

Peut-être BeanFactoryPostProcessors sera à vos besoins? Suite Ils sont exécutés après la lecture de tous les fichiers de configuration XML, mais avant que tous les autres beans ne soient instanciés.

+0

grande, qui est ce que je cherchais, merci beaucoup – mlo55

5

Vous pouvez également utiliser le ApplicationListener pour recevoir des notifications d'événements tels que ContextClosedEvent, ContextStartedEvent ou ContextStoppedEvent.

Plus d'informations dans le chapitre IoC Container.

+1

Je ne pense pas 'ApplicationListeners' être averti * avant * le contexte commence, il ne semble pas y avoir d'événement pour ça. – skaffman

+0

à partir du JavaDoc ContextRefreshedEvent: "Événement déclenché lorsqu'un ApplicationContext est initialisé ou actualisé." Je vais vérifier ce soir si l'événement est envoyé * avant * l'initialisation ou juste après. – Vladimir

+2

J'essaie d'écouter sur ContextStartedEvent mais il semble que le cycle de vie par défaut d'un contexte ne soit pas explicitement appelé par la méthode start, et donc l'événement n'est pas publié. Par cycle de vie par défaut, je veux simplement dire le démarrage de l'ensemble du serveur web et du contexte (que je pensais déclencher ContextStartedEvent). Une idée de pourquoi c'est? – Eugen

2

Je viens de déclarer le mien ContextLoaderListener afin d'effectuer le travail désiré avant de charger le contexte Spring. Il convient de web-apps, juste déclarer avant l'auditeur de contexte Spring:

public class MyServletContextListener implements ServletContextListener { 

    @Override 
    public void contextDestroyed(ServletContextEvent arg0) { 

    } 

    @Override 
    public void contextInitialized(ServletContextEvent arg0) { 
     //Perform your stuff here 
    } 

} 
<listener> 
    <listener-class> 
     com.myCompany.listeners.MyServletContextListener</listener-class> 
</listener> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
Questions connexes