Pour changer un peu de docker, voici un petit article pour initier un projet spring sans fichier de configuration XML.
Je vais créer une petite application avec un Controller Spring MVC.
Tout d’abord, on ajoute les dépendances. Servlet 3.1, spring-context , spring mvc suffisent:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<properties> <spring.version>4.1.0.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> </dependencies> |
On va ensuite créer une classe qui va permettre de gérer l’initialisation de la configuration spring. Pour cela, j’utilise une nouveauté de servlet 3.0 qui est l’interface WebApplicationInitializer:
1 2 3 |
public interface WebApplicationInitializer { void onStartup(javax.servlet.ServletContext servletContext) throws javax.servlet.ServletException; } |
En implémentant une classe avec la méthode onStartup, on peut faire l’initialisation de son application. C’est plus simple que de faire une « fausse » servlet avec un paramètre loadOnStartup dans le fichier web.xml
Voici le code de la classe que j’utilise:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class MyWebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { WebApplicationContext context = getContext(); servletContext.addListener(new ContextLoaderListener(context)); ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet", new DispatcherServlet(context)); dispatcher.setLoadOnStartup(1); dispatcher.addMapping("/*"); } private AnnotationConfigWebApplicationContext getContext() { AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.setConfigLocation("com.axioconsulting.demo.spring.config"); return context; } } |
La méthode getContext va permettre de gérer la configuration par annotation en commençant par le package com.axioconsulting.demo.spring.config.
Dans ce package, j’ai défini 2 classes.
1 2 3 4 |
@Configuration @ComponentScan("com.axioconsulting.demo.spring.controller") public class AppConfig { } |
L’annotation @Configuration permet à Spring de savoir que cette classe est à prendre en compte pour la configuration. Dans notre cas, on précise juste qu’il faut scanner le package com.axioconsulting.demo.spring.controller (c’est là que va se trouver le controller)
1 2 3 4 |
@Configuration @EnableWebMvc public class WebMvcConfig { } |
Cette classe permet d’importer la configuration spring MVC.
NB: On aurait pu fusionner les 2 classes.
Il ne reste plus qu’à mettre en place le controller.
1 2 3 4 5 6 7 8 9 10 11 |
@Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello(@RequestParam(required = false) String name){ if (StringUtils.isEmpty(name)){ return "Welcome anonymous"; } return "Hello "+name; } } |
Il s’agit d’un controller basic qui va répondre un message sur /hello ou sur /hello?name=monNom
Et voila, on a réussi à initier une appli spring MVC en manipulant seulement des annotations ce qui me parait plus simple.
A voir sur le long terme et sur un projet un peu plus gros si les annotations sont suffisantes.
Les sources sont ici: https://github.com/BenoitCharret/demoSpring