Je travaille avec Spring 4.0.7
J'ai fait une recherche sur la configuration de Spring MVC via JavaConfig.
Pratiquement jusqu'à hier, j'ai vu deux configurations utilisant ces deux options
Note: (2) sont deux classes, une pour l'extension et l'autre pour l'implémentation
J'utilise (2) car j'ai trouvé de nombreux exemples où je suis capable de configurer des convertisseurs, des formateurs, des gestionnaires de ressources etc…
Mais ces derniers jours, j'ai essayé d'aider une question sur StackOverflow et j'ai réalisé que (1) existe .. J'ai fait un aperçu sur Google à propos de (1) et existe quelques exemples de travail avec (1)
Ma question est de savoir comment le titre de cet article décrit.
Je vous remercie
Avec la sortie de la spécification Servlet 3.0, il est devenu possible de configurer votre conteneur de servlets avec (presque) aucun xml. Pour cela, il y a ServletContainerInitializer
dans la spécification Servlet. Dans cette classe, vous pouvez enregistrer des filtres, des écouteurs, des servlets, etc., comme vous le feriez traditionnellement dans un web.xml
.
Spring fournit une implémentation des classes SpringServletContainerInitializer
qui sait gérer les classes WebApplicationInitializer
. Spring propose également quelques classes de base à étendre pour vous faciliter la vie, le AbstractAnnotationConfigDispatcherServletInitializer
en fait partie. Il enregistre un ContextLoaderlistener
(facultatif) et un DispatcherServlet
et vous permet d'ajouter facilement des classes de configuration à charger pour les deux classes et d'appliquer des filtres au DispatcherServlet
et de fournir le servlet cartographie.
Le WebMvcConfigurerAdapter
sert à configurer Spring MVC, le remplacement du fichier xml chargé par le DispatcherServlet
pour configurer Spring MVC. WebMvcConfigurerAdapter
doit être utilisé pour un @Configuration
classe.
@Configuration
@EnableWebMvc
public class WebConfiguration
extends WebMvcConfigurerAdapter implements WebApplicationInitializer
{ ... }
Je ne recommanderais pas de mélanger ceux-ci car ils sont fondamentalement 2 préoccupations différentes. Le premier sert à configurer le conteneur de servlet, le second à configurer Spring MVC.
Vous voudriez les diviser en 2 classes.
Pour la configuration.
@Configuration
@EnableWebMvc
public class WebConfiguration extends WebMvcConfigurerAdapter { ... }
Pour amorcer l'application.
public class MyWebApplicationInitializer
extends AbstractAnnotationConfigDispatcherServletInitializer
{
protected Class<?>[] getRootConfigClasses() {
return new Class[] {RootConfig.class};
}
protected Class<?>[] getServletConfigClasses() {
return new Class[] {WebConfiguration .class};
}
protected String[] getServletMappings() {
return new String[] {"/"};
}
}
Un avantage supplémentaire est que vous pouvez désormais utiliser les classes de commodité fournies par Spring au lieu de configurer manuellement DispatcherServlet
et/ou ContextLoaderListener
.
Pour commencer depuis le début, il vaut la peine de voir comment le conteneur de servlet démarre.
Donc, pour commencer - SpringServletContainerInitializer doit trouver la bonne classe implémentant WebApplicationInitializer . Il y a deux façons d'y arriver:
Je voudrais également souligner que WebMvcConfigurerAdapter que vous mentionnez ne doit pas être confondu avec WebApplicationInitializer. Comme son nom l'indique - cela a à voir avec la configuration de "Mvc". Il s'agit d'une classe d'adaptateur qui implémente des méthodes vides de WebMvcConfigurer . Vous l'utilisez lorsque vous configurez votre contrôleur Mvc avec @ EnableWebMvc annotation.
J'espère que cela t'aides.