Есть ли способ, которым контекст может быть загружен с помощью web.xml в приложении Spring MVC?
Загрузка контекста в Spring с помощью web.xml
Ответ 1
Из spring docs
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, чтобы получить дескриптор на beans.
WebApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servlet.getServletContext());
SomeBean someBean = (SomeBean) ctx.getBean("someBean");
Ответ 2
Вы также можете указать местоположение контекста относительно текущего пути к классам, что может быть предпочтительным
<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>
Ответ 3
Вы также можете загрузить контекст при определении самого сервлета (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. Таким образом, вы можете загружать все свои бизнес-услуги, доступ к данным или репозиторий beans в контексте приложения и выделять свой контроллер, просматривать преобразователь beans в WebApplicationContext.