2010-04-06 9 views
5

Chcę użyć zarówno ContextLoaderListener (tak, że można przekazać Spring bean do mojego servlet), jak i DispatchServlet (Spring MVC). Jednak obecnie muszę przechodzić startowy param do obu tych klas inicjatora:Użyj ContextLoaderListener zgodnie z DispatchServlet

<param-name>contextConfigLocation</param-name> 
<param-value> 
    /WEB-INF/spring/app-config.xml 
</param-value> 

Tak, używam tego samego xml dla obu tych klas. Zastanawiam się, czy spowodowałoby to dwukrotne zainicjowanie mojej fasoli? Jeśli tak, jak mam to zrobić, aby tego uniknąć?

Odpowiedz

12

Dla parametrów ContextLoaderListener i DispatcherServlet parametr contextConfigLocation jest opcjonalny.

ContextLoaderListener domyślnie /WEB-INF/application.xml, DispatcherServlet domyślnie jest /WEB-INF/servletname-servlet.xml.

Jeśli ustawisz te parametry jawnie, powinieneś , a nie ustawić je na tę samą wartość. Modele ContextLoaderListener i DispatcherServlet powinny mieć konteksty z różnymi zestawami definicji komponentów bean, ponieważ w przeciwnym razie, jak mówisz, komponenty bean zostaną utworzone dwa razy.

+1

więc nie ma mowy o tych dwóch dzielić ten sam zestaw ziaren? –

+1

@Phuong: Ziarna serwletu będą miały dostęp do ziaren w kontekście załadowanym przez detektora. Konteksty tworzą relację rodzic-dziecko. Ziarna są "własnością" rodzica, ale widoczne dla dziecka – skaffman

+0

Hmm, czytałem jeden z twoich postów tutaj: http://stackoverflow.com/questions/1464881/defaultannotationhandlermapping-via-contextloaderlistener-instead-of-dispatcherse, a problem został wyjaśniony znacznie czystszy. Postaram się sprawdzić, czy uda mi się uniknąć duplikowania moich ziaren. Dzięki. –

6

zmusić DispatcherServlet korzystanie inicjalizacji kontekstowe z ContextLoaderListener należy ustawić contextConfigLocation jako puste:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     classpath:spring-context.xml 
    </param-value> 
</context-param> 

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

<servlet> 
    <servlet-name>dispatcherServlet</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value></param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>dispatcherServlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 
Powiązane problemy