2010-04-06 1 views
5

Ich möchte ContextLoaderListener (so dass ich Spring Beans zu meinem Servlet übergeben kann) sowie DispatchServlet (Spring MVC) verwenden. Doch derzeit muss ich init param auf diese beiden Klasseninitialisierer passieren:Verwenden Sie einen ContextLoaderListener in Übereinstimmung mit DispatchServlet

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

Also, ich benutze die gleiche xml für diese beiden Klassen. Frage mich, ob es dazu führen würde, dass meine Bohnen zweimal initialisiert würden? Wenn ja, wie würde ich das vermeiden?

Antwort

12

Für ContextLoaderListener und DispatcherServlet ist der Parameter contextConfigLocation optional.

ContextLoaderListener Standardeinstellung ist /WEB-INF/application.xml, DispatcherServlet ist standardmäßig /WEB-INF/servletname-servlet.xml.

Wenn Sie diese Parameter explizit festlegen, sollten Sie nicht auf den gleichen Wert setzen. Die ContextLoaderListener und DispatcherServlet sollten Kontexte mit verschiedenen Mengen von Bean-Definitionen haben, da sonst, wie Sie sagen, die Beans zweimal instanziiert werden.

+1

es also für diese beiden keine Möglichkeit, den gleichen Satz von Bohnen zu teilen? –

+1

@Phuong: Die Beans des Servlets haben Zugriff auf die Beans in dem vom Listener geladenen Kontext. Die Kontexte bilden eine Eltern-Kind-Beziehung. Die Bohnen sind "im Besitz" der Eltern, aber für das Kind sichtbar – skaffman

+0

Hmm, ich lese einen Ihrer Post hier: http://StackOverflow.com/Questions/1464881/defaultannotationHandlermapping-viaContextloaderListener-instead-of-dispatcherse, und das Problem wurde viel sauberer erklärt. Ich werde versuchen zu sehen, ob ich es vermeiden kann, meine Bohnen zu duplizieren. Vielen Dank. –

6

zu zwingen DispatcherServlet Initialisierung Verwendung Kontext von Context Sie contextConfigLocation als leer setzen soll

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