2009-11-15 12 views
6

Gibt es irgendwelche Haken beim Spring ApplicationContext Ladevorgang?Spring applicationcontext loading hooks

Ich möchte ein Stück Code ausführen, bevor der Anwendungskontext geladen wird (bevor irgendwelche Beans/Eigenschaften/Aspekte/etc ... instanziiert werden).

Dank im Voraus

Antwort

6

Vielleicht BeanFactoryPostProcessors wird Suite Ihre Bedürfnisse? Sie werden ausgeführt, nachdem die gesamten XML-Konfigurationsdateien gelesen wurden, jedoch bevor irgendwelche (anderen) Beans instanziiert werden.

+0

groß, das ist, was ich war nach dem, Dank sehr viel – mlo55

5

Sie können auch die ApplicationListener verwenden, um Benachrichtigungen über Ereignisse wie ContextClosedEvent, ContextStartedEvent oder ContextStoppedEvent zu erhalten.

Weitere Informationen finden Sie im Kapitel IoC Container.

+1

Ich glaube nicht, 'ApplicationListeners' * benachrichtigt, bevor * Der Kontext beginnt, es scheint kein Ereignis dafür zu geben. – skaffman

+0

von der ContextRefreshedEvent JavaDoc: "Ereignis ausgelöst, wenn ein ApplicationContext initialisiert oder aktualisiert wird." Ich werde heute Abend prüfen, ob das Event * vor * der Initialisierung oder kurz danach gesendet wird. – Vladimir

+2

Ich versuche, auf ContextStartedEvent zu hören, aber es scheint, dass der Standardlebenszyklus eines Kontexts nicht explizit die Startmethode aufruft und das Ereignis daher nicht veröffentlicht wird. Als Standardlebenszyklus bedeute ich einfach das Starten des gesamten Webservers und des gesamten Kontextes (von dem ich erwartete, dass ich ContextStartedEvent absetzen würde). Irgendeine Idee warum das ist? – Eugen

2

Ich habe gerade meine eigene ContextLoaderListener deklariert, um die gewünschte Arbeit vor dem Laden des Spring-Kontext durchzuführen. Es eignet sich für Web-Anwendungen, erklären sie kurz vor dem Frühlings Kontext Zuhörer:

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> 
Verwandte Themen