Menú de navegaciónMenú
Categorías

La mejor forma de Aprender Programación online y en español www.campusmvp.es

?id=f7ae6610-8ebe-44d2-b470-fe04aae73df2

¿Qué son Spring framework y Spring Boot? Tu primer programa Java con este framework

Imagen ornamental de Spring framework

Si desarrollas con Java, o lo has hecho en algún momento de los últimos años, seguramente te suene Spring Framework, aunque sea de oídas.

Spring Framework es un framework Open Source que facilita la creación de aplicaciones de todo tipo en Java, Kotlin y Groovy.

Si bien es cierto que, por lo que es más conocido es por la inyección de dependencias, Spring Framework está dividido en diversos módulos que podemos utilizar, ofreciéndonos muchas más funcionalidades:

  • Core container: proporciona inyección de dependencias e inversión de control.
  • Web: nos permite crear controladores Web, tanto de vistas MVC como aplicaciones REST.
  • Acceso a datos: abstracciones sobre JDBC, ORMs como Hibernate, sistemas OXM (Object XML Mappers), JSM y transacciones.
  • Programación orientada a Aspectos (AOP): ofrece el soporte para aspectos.
  • Instrumentación: proporciona soporte para la instrumentación de clases.
  • Pruebas de código: contiene un framework de testing, con soporte para JUnit y TestNG y todo lo necesario para probar los mecanismos de Spring.

Estos módulos son opcionales, por lo que podemos utilizar los que necesitemos sin tener que llenar nuestro classpath con clases que no vamos a usar.

Esquema que ilustra los diferentes módulos de Spring, obtenido de la documentación oficial

Razones para usar Spring

Aunque no sea una característica única de Spring, el uso de inyección de dependencias facilita la programación contra interfaz, permitiendo a los distintos componentes depender únicamente de interfaces y produciendo así un código menos acoplado. No solo eso, también permite implementar el patrón singleton de una forma extremadamente sencilla (por defecto, las dependencias que inyectamos son singletons).

Hay cientos de tecnologías que Spring permite integrar. Desde bibliotecas que implementan opentracing hasta las que nos generan métricas para nuestra aplicación, pasando por serialización/deserialización a JSON y XML, seguridad con OAuth2 o programación reactiva entre otras.

En general, Spring aumenta la productividad y reduce la fricción al ofrecernos abstracciones sobre implementaciones de tecnologías concretas. Un ejemplo claro es el de spring-data, que nos permite definir el acceso a base de datos con interfaces Java. Esto lo consigue parseando el nombre de los métodos y generando la consulta con la sintaxis específica para el driver que utilicemos. Por ejemplo, cambiar nuestra aplicación de MySQL a PostgreSQL es tan sencillo como cambiar el driver: Spring se encarga de la sintaxis de forma transparente.

A pesar de "la magia de Spring" 🧙🏻‍♂️, como muchos lo llaman, Spring nos permite desactivar estos "comportamientos mágicos" en caso de ser necesario, por lo que podemos tomar el control cuando necesitemos más granularidad. Siguiendo con el ejemplo de spring-data, este control sería necesario si tenemos que realizar consultas mucho más complejas que un SELECT * BY name. En esos casos, entre otras opciones, podemos anotar nuestro método con @Query y escribir la consulta que deseemos. Ya no hay magia 😉

Por lo general, Spring no obliga a implementar ni extender nada, lo que nos permite escribir código que es "agnóstico" del framework. De esta forma, desarrolladores con cero o muy poco conocimiento de Spring pueden realizar su trabajo sin mayores complicaciones.

Spring es de código abierto y tiene una gran comunidad detrás. Si encuentras un bug, echas en falta una funcionalidad o lo que sea, siempre puedes abrir un ticket o contribuir por tu cuenta.

¿Pero no íbamos a hablar de Spring Boot?

Hasta ahora he hablado de Spring Framework en general, pero el título de esta entrada menciona Spring Boot, así que voy a presentarlo.

Si bien es cierto que Spring Framework es muy potente, la configuración inicial y la preparación de las aplicaciones para producción son tareas bastante tediosas. Spring Boot simplifica el proceso al máximo gracias a sus dos principales mecanismos.

Contenedor de aplicaciones integrado

Spring Boot permite compilar nuestras aplicaciones Web como un archivo .jar que podemos ejecutar como una aplicación Java normal (como alternativa a un archivo .war, que desplegaríamos en un servidor de aplicaciones como Tomcat).

Esto lo consigue integrando el servidor de aplicaciones en el propio .jar y levantándolo cuando arrancamos la aplicación. De esta forma, podemos distribuir nuestras aplicaciones de una forma mucho más sencilla, al poder configurar el servidor junto con la aplicación. Esto también es muy útil en arquitecturas de microservicios, puesto que permite distribuir nuestras aplicaciones como imágenes Docker que podemos escalar horizontalmente (algo muy complicado con un .war).

Nota: Spring boot permite distribuir tu aplicación como un jar, no lo impone. Si prefieres desplegar tu aplicación en un servidor de aplicaciones tradicional, Spring Boot te deja compilar el código como un .war que no incluya ningún servidor de aplicaciones integrado.

Starters

Spring Boot nos proporciona una serie de dependencias, llamadas starters, que podemos añadir a nuestro proyecto dependiendo de lo que necesitemos: crear un controlador REST, acceder a una base de datos usando JDBC, conectar con una cola de mensajes Apache ActiveMQ, etc.

Una vez añadimos un starter, éste nos proporciona todas las dependencias que necesitamos, tanto de Spring como de terceros. Además, los starters vienen configurados con valores por defecto, que pretenden minimizar la necesidad de configuración a la hora de desarrollar. Un buen ejemplo es el de spring-boot-starter-actuator: una vez que añadimos la dependencia, nuestra aplicación empezará a generar métricas tanto de la JVM como de la aplicación en sí (latencias, errores, etc).

Al igual que con Spring Framework, cualquier configuración puede ser modificada de ser necesario: desde el puerto en el que la aplicación escucha peticiones, hasta el banner que sale por consola al arrancar la aplicación.

Hola Mundo con Spring Boot

Para demostrar lo fácil que es empezar a usar Spring Boot, vamos a ver el código necesario para crear nuestro primer "Hola mundo":

@SpringBootApplication
@RestController
public class Application {

    @GetMapping("/hello")
    public String hello() {
        return "Hello Bootiful!";
    }
}

Sencillo, ¿verdad?

Un poco más abajo te explico en un vídeo práctico cómo llegar a este código y qué significa.

Bonus tip: Spring Initializr

Captura de Spring Initializr

El equipo de Spring también ha creado Spring Initializr, una herramienta web que puedes utilizar para autogenerar el esqueleto de tu aplicación Spring Boot.

Se trata de un inicializador muy útil, ya que genera el pom.xml (o build.gradle), el main de la aplicación, y un test que comprueba que la aplicación arranca correctamente.

Vídeo práctico: "Hola Mundo" con Spring Boot

👉🏻 Aprende BIEN a sacar todo el partido a Spring

Fecha de publicación:
Rubén Pahíno Rubén es Back-End Tech lead en Travix International (Londres). En su día a día trabaja con Java/Spring como sus herramientas principales. Apasionado de las buenas prácticas y el código de calidad, siempre con un ojo en el proceso completo de crear un aplicación, desde el diseño al despliegue y posterior mantenimiento. Actualmente se encuentra a cargo del framework y de la adopción reactiva con Spring Webflux por parte de los equipos Java en Travix. Ver todos los posts de Rubén Pahíno
Archivado en: Lenguajes y plataformas

Boletín campusMVP.es

Solo cosas útiles. Una vez al mes.

🚀 Únete a miles de desarrolladores

DATE DE ALTA

x No me interesa | x Ya soy suscriptor

La mejor formación online para desarrolladores como tú

Comentarios (7) -

Gracias Ruben, muy claro y conciso.

Responder

Hola que tal, muy buena la información, tengo una preguntar para crear microservicos y api rest con spring que tanto debo saber de java? tengo que aprender hilos y stream? o puedo hacer microservicios sencillos con los básico de java?

Responder

Rubén Pahíno
Rubén Pahíno

Hola Anthony,

realmente puedes crear microservicios con lo básico de Java. Por ejemplo, el "hola mundo" que muestro en este post. En general, la lógica de negocio será código Java normal, pero todo dependerá de lo que vayas a hacer; Si tienes capa de persistencia o de acceso a servicios externos, es posible que necesites saber un poco de JDBC/JPA y de las clases RestTemplate/WebClient de Spring, respectivamente.

En cuanto a los dos casos concretos que comentas:
- La API de Stream es completamente opcional, simplemente te permite escribir código funcional, pero nada que no puedas hacer con un for de forma imperativa.

- Respecto a hilos es Spring Boot se encarga de ejecutar cada petición en un hilo dedicado para ésta, de forma 100% transparente (si usas Spring MVC*). Solo te tienes que preocupar por ellos si tú, manualmente, quieres ejecutar partes de tu lógica en otro hilo (y aún así es posible que puedas abstraerte de los hilos con anotaciones como @Async).

* Comento lo de Spring MVC porque en el caso de Spring Webflux (programación reactiva) el funcionamiento es diferente, muy similar al Event Loop de NodeJs (nodejs.org/.../). Pero yo no me metería de primeras con Webflux :)

Responder

Carlos Rodríguez
Carlos Rodríguez

Rubén. Muchas gracias por el artículo, está muy claro.
Redactas muy bien los artículos!
Hasta ahora he venido desarrollando aplicaciones de escritorio Java y quiero pasarme a un entorno web. Que me aconsejas para comenzar? algo sencillo dónde pueda desplegar algunos formularios web para hacer un crud Y algún listado.
No quiero meterme por ahora con JavaEE.
Qué alternativas tengo? Muchas gracias.

Responder

Rubén Pahíno
Rubén Pahíno

Hola Carlos,

con el conocimiento que tienes puedes dar el salto a Spring directamente (sin necesidad de meterte en ningún momento con temas de JavaEE); Si le echas un ojo a Spring MVC verás que puedes crear vistas web de manera muy sencilla. Solo tienes que preocuparte de saber lo que necesites de HTML y quizás aprender tres o cuatro cosas the Thymeleaf (https://www.thymeleaf.org/). Para el acceso a datos te recomiendo Spring Data (JDBC o JPA, dependiendo de la tecnología que prefieras utilizar). Asumiendo que utilizas Spring Boot, puedes ejecutar tu aplicación en local sin necesidad de ningún servidor de aplicaciones. De cara a ir más allá y desplegarla en algún lado, yo siempre recomiendo crear una imagen Docker y desplegarla en donde prefieras :)

Si quieres un enfoque más estructurado, en CampusMVP disponemos de un curso que yo mismo he creado. En él explico estos y muchos más conceptos de Spring y Spring Boot y acabarías el curso realizando una aplicación web similar a lo que comentas. Puedes echarle un vistazo aquí: www.campusmvp.es/.../...a-con-Spring-Boot_248.aspx

Responder

Muy buena información saludos!

Responder

Gracias amigo muy útil tu explicación. Dios te bendiga!

Responder

Agregar comentario

Los datos anteriores se utilizarán exclusivamente para permitirte hacer el comentario y, si lo seleccionas, notificarte de nuevos comentarios en este artículo, pero no se procesarán ni se utilizarán para ningún otro propósito. Lee nuestra política de privacidad.