Загрузка контекста в Spring с помощью web.xml - PullRequest
68 голосов
/ 23 июня 2011

Есть ли способ загрузить контекст с помощью web.xml в приложении Spring MVC?

Ответы [ 3 ]

118 голосов
/ 23 июня 2011

Из документов Spring

Spring можно легко интегрировать в любой веб-каркас на основе Java.Все, что вам нужно сделать, это объявить ContextLoaderListener в вашем web.xml и использовать contextConfigLocation , чтобы указать, какие файлы контекста загружать.

<context-param>:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>

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

Затем вы можете использовать WebApplicationContext, чтобы получить указатель на ваши bean-компоненты.

WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servlet.getServletContext());
SomeBean someBean = (SomeBean) ctx.getBean("someBean");

См. http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/context/support/WebApplicationContextUtils.html для получения дополнительной информации

34 голосов
/ 23 июня 2011

Вы также можете указать расположение контекста относительно текущего пути к классу, что может быть предпочтительнее

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

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
17 голосов
/ 27 сентября 2015

Вы также можете загрузить контекст при определении самого сервлета ( WebApplicationContext )

  <servlet>
    <servlet-name>admin</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>
                /WEB-INF/spring/*.xml
            </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>admin</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

вместо ( ApplicationContext )

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext*.xml</param-value>
</context-param>

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

или может делать оба вместе.

Недостатком простого использования WebApplicationContext является то, что он будет загружать контекст только для этой конкретной точки входа Spring (DispatcherServlet), где, как и в случае с вышеупомянутыми методами, контекст будет загружен для множественного входаточки (например, Webservice Servlet, REST servlet и т. д.)

Контекст, загруженный ContextLoaderListener, на самом деле будет родительским контекстом, который загружен специально для DisplacherServlet.Таким образом, в основном вы можете загрузить все свои бизнес-сервисы, компоненты доступа к данным или репозитория в контексте приложения и выделить свой контроллер, просмотреть компоненты резолвера в WebApplicationContext.

...