Spring MVC configuration annotation es una de las posibilidades que tenemos en las versiones 3.x y 4.x de Spring Framework a la hora de configurar el framework Spring utilizando unicamente anotaciones y prescindiendo del uso de ficheros XML. Esto permite chequear gran parte de la configuración en tiempo de compilación y evitará muchos problemas.
Spring MVC configuration annotation
Vamos a crear un ejemplo de hola mundo que configure el framework unicamente con anotaciones . Para ello el primer paso es definir un fichero pom.xml con las dependencias del framework que vayamos a utilizar:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.2.4.RELEASE</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
En este caso hemos usado Spring 4 , una vez tenemos las dependencias el siguiente paso es crear una clase de Spring de configuración:
package com.arquitecturajava; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration @EnableWebMvc @ComponentScan(basePackages = { "com.arquitecturajava" }) public class SpringConfiguracion extends WebMvcConfigurerAdapter{ @Bean public InternalResourceViewResolver getInternalResourceViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/jsp/"); resolver.setSuffix(".jsp"); return resolver; } }
En esta clase se han definido los packages a escanear a través de la anotación @ComponentScan. Se ha activado las capacidades de Spring MVC utilizando @EnableSpringMVC y finalmente se ha añadido un último bean que referencia al ViewResolver. Vamos a construir un Controlador que mapee la url de /hola y una página jsp dentro de la carpeta /WEB-INF/jsp que nos muestre un mensaje de “hola”.
package com.arquitecturajava; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class ControladorHola { @RequestMapping("/hola") public String hola() { return "hola"; } }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> hola </body> </html>
Hemos configurado Spring MVC a través del uso de anotaciones , aun así nos queda dar de alta un Servlet que registre Spring MVC como framework en nuestra WebApp.
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="3.1"> <servlet> <servlet-name>SpringController</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name>contextClass</param-name> <param-value> org.springframework.web.context.support.AnnotationConfigWebApplicationContext </param-value> </init-param> <init-param> <param-name>contextConfigLocation</param-name> <param-value> com.arquitecturajava.SpringConfiguracion </param-value> </init-param> </servlet> <servlet-mapping> <servlet-name> SpringController </servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
En este caso hemos usado una clase de contexto que se apoya en anotaciones. Invocamos la URL de /hola y la aplicación funcionará sin problemas.
Nos hemos apoyado en Spring MVC configuration annotation para eliminar los ficheros de configuración de Spring Framework. Es posible incluso eliminar el fichero web.xml para ello nos apoyaríamos en un WebApplicationInitializer
Otros artículos relacionados:
Para usarlo con weblogic es la misma configuración ?
en principio si
Hola Cecilio.
Podrías hacer un pequeño artículo comentando los diferentes frameworks que existen en JAVA y el propósito (una pequeña descripción) ? Me ocurre que veces estoy trabajando con ciertas herramientas/tecnologías pero no estoy entendiendo realmente lo que uso y por qué lo uso.
Saludos
Hola, en lugar de dar de alta a un servlet puedo hacerlo con JSP?
Lo que es dar de alta el despachador no , no se si he entendido tu pregunta
Hola Cecilio, nuevamente mil gracias por compartir sus conocimientos de forma sabia y precisa. Cuando monto su ejemplo me da el siguiente error:
java.lang.ClassNotFoundException: org.aopalliance.aop.Advice
incluso elimino la clase y lo configuro con un context.xml y me da el mismo error, evidentemente no encuentra la clase pero se supone que venga junto con spring 4. Alguna idea?
Te faltan las librerías de AOP , revisa los jars de spring que tienes
Hola Cecilio, muchas gracias por compartir tus conocimientos, tengo una pregunta, en el caso de quisiera que el viewResolver aceptara proyectos con el estandar JSF, de pronto tienes algun ejemplo?
no lo he probado la verdad , ya lo siento
Gracias maestro. Conoce de algún tutoriales que cubra la configuración de spring mediante anotaciones únicamente, cubriendo escenarios como la configuración de jpa, gobernante, datssources jndi,etc.
No no me conozco ninguno que use todas las anotaciones a la vez que comentas 🙁
En el siguiente enlace de Github puedes ver una configuración únicamente con anotaciones, pero faltan algunas cosas ya que es una serie de tutoriales de aprendizaje y según avanzan se van añadiendo.
https://github.com/Jaime-Alonso/TutorialSpringMVC
Saludos!
gracias por el aporte 🙂
Gracias por el enlace Jaime, ahorita me dispongo a revisarlo
de nada 🙂