Используйте ContextLoaderListener в соответствии с DispatchServlet - PullRequest
5 голосов
/ 06 апреля 2010

Я хочу использовать как ContextLoaderListener (чтобы я мог передавать Spring Beans в мой сервлет), так и DispatchServlet (Spring MVC). Тем не менее, в настоящее время я должен передать init параметр этим инициализаторам обоих классов:

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

Итак, я использую один и тот же xml для этих обоих классов. Интересно, не приведет ли это к инициализации моих бинов дважды? Если да, как бы я сделал, чтобы избежать этого?

Ответы [ 2 ]

12 голосов
/ 06 апреля 2010

Для ContextLoaderListener и DispatcherServlet параметр contextConfigLocation является необязательным.

ContextLoaderListener по умолчанию /WEB-INF/application.xml, DispatcherServlet по умолчанию /WEB-INF/servletname-servlet.xml.

Если вы установите эти параметры явно, вы должны , а не установить для них одно и то же значение. ContextLoaderListener и DispatcherServlet должны иметь контексты с различными наборами определений bean-компонентов, поскольку в противном случае, как вы говорите, bean-компоненты будут созданы дважды.

6 голосов
/ 26 июня 2013

для принудительного DispatcherServlet использование инициализации context из ContextLoaderListener вы должны установить contextConfigLocation как пустое:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...