web-dev-qa-db-fra.com

Chargement du contexte dans Spring à l'aide de web.xml

Existe-t-il un moyen de charger un contexte à l'aide de web.xml dans une application Spring MVC?

68
tamilnad

À partir du printemps

Spring peut être facilement intégré à n’importe quel framework Web basé sur Java. Tout ce que vous avez à faire est de déclarer le ContextLoaderListener dans votre web.xml et utilisez un contextConfigLocation pour définir les fichiers de contexte à charger.

Le <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> 

Vous pouvez ensuite utiliser WebApplicationContext pour obtenir un descripteur sur vos beans.

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

Voir http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/context/support/WebApplicationContextUtils.html pour plus d'informations.

118
ddewaele

Vous pouvez également spécifier l'emplacement du contexte par rapport au classpath actuel, ce qui peut être préférable.

<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>
34
fmucar

Vous pouvez également charger le contexte tout en définissant le servlet lui-même (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>

plutôt que (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> 

ou peut faire les deux ensemble.

Le seul inconvénient de WebApplicationContext est qu’il ne chargera le contexte que pour ce point d’entrée Spring (DispatcherServlet), où, comme pour les méthodes susmentionnées, le contexte sera chargé pour plusieurs points d’entrée (p. Ex. Webservice Servlet, REST servlet etc)

Le contexte chargé par ContextLoaderListener indiquera un contexte parent à celui chargé spécifiquement pour DisplacherServlet. En résumé, vous pouvez charger tous les beans de service, d’accès aux données ou de référentiel dans votre contexte d’application et séparer votre contrôleur, ainsi que visualiser les beans de résolution dans WebApplicationContext.

17
Aniket Thakur