¿Qué es Spring Framework?

Álvaro Mateos ¿Qué es Spring Framework?

Me gustaría señalar que el presente artículo es una visión completamente subjetiva, simplemente comparto mi punto de vista como desarrollador en Aurigae – Cashware sobre una herramienta de trabajo de mi día a día. Bajo ninguna circunstancia pretendo convencer ni condicionar a nadie sobre el uso de Spring Framework.

Comentar que llevo seis años de experiencia como desarrollador Java de back end y llevo trabajando dos años con Spring Framework como soporte a Java. Dicho esto, empecemos.

 

¿Qué es Spring Framework?

Voy a tratar de explicar qué es Spring Framework con mis propias palabras intentando no ser demasiado técnico. Básicamente Spring es un framework que va por encima de Java y que se compone de herramientas y utilidades que ayudan al desarrollador a crear aplicaciones web en Java para la parte del back end. Para mí, su principal valor consiste en la capacidad de generar código automático para tareas estándar, como el acceso a base de datos, endpoints, etc.

Tiene un valor especialmente importante en el desarrollo de aplicaciones y contenedor de inversión de control. Es de código abierto para Java.

A pesar de que las principales características de Spring Framework pueden ser usadas en cualquier aplicación desarrollada en Java, existen variadas extensiones para la construcción de aplicaciones web sobre Java EE. Este framework se ha vuelto popular al ser considerado una alternativa al modelo EJB.

Beneficios que me he encontrado en mi trabajo diario con Spring Framework

Quiero centrarme sobre aquellos puntos que más me gustan y considero que más valor me aportan a mi día a día de trabajo.

Desde mi punto de vista como desarrollador, el valor de Spring reside en la versatilidad del framework, es decir, Spring se divide en diferentes módulos y cada uno de estos módulos va a ayudarnos para diferentes necesidades. Por poner un ejemplo, Spring Framework es especialmente útil a la hora de reducir líneas de código, para ello se cuenta con el módulo Spring-Core. Cuando hablamos de la reducción de líneas de código, estamos hablando que para algo que puedas necesitar 50 líneas Spring Framework te permite hacerlo en 3. Quizás el ejemplo paradigmático de ahorro de líneas de código es la inicialización de las instancias de clases y las dependencias entre ellas, ya que al hacerlo de manera automática son líneas que ahorras.

Otro ejemplo relevante que podría exponer sería el desarrollo web sobre REST API, en este caso Spring Framework gestiona la petición, analiza el tipo de datos y decide sobre qué clase de Java tiene que trabajar para poder procesar esos datos. Trato de explicarlo con un ejemplo práctico. El módulo REST API (Spring-mvc) me ayuda como técnico de back end a trabajar de la mano de los técnicos de front. Así, cuando en una url tengo que hacer un end point, los desarrolladores de front pueden llamar ese end point y es Spring Framework quien acude a esa llamada, la recoge, decide qué clase puede procesar esa información, ejecuta esta clase, procesa la información, y lo envía de vuelta al front. Desde un punto de vista de desarrollo, supone una ayuda incuestionable además de reducción de tiempos.

Entre las caracterísitcas que me gustaría destacar, la seguridad también me parece un elemento importantísimo a tener en cuenta. Spring-security gestiona la seguridad de los servicios web de manera sencilla, desde el protocolo de seguridad, hasta los roles que necesitan los usuarios para acceder a los diferentes recursos de la aplicación.

También existen otros módulos interesantes como la configuración de visibilidad y gestión de objetos, o la gestión de transacciones, que unifica distintas APIs de gestión y coordina las transacciones para los objetos. Además de algunos otros que no incluyo en la lista que también merecen la pena de Spring Framework.

Características a tener en cuenta al usar Spring Framework

Puesto que no todo es blanco o negro, existen algunos puntos que son importantes a tener en cuenta si queremos invertir en el aprendizaje de Spring Framework.

En primer lugar, destacar la configuración. Ésta se descompone en dos grandes tipologías, por anotaciones o por ficheros de configuración. Cierto es que la configuración a través de anotaciones es algo más sencilla, no obstante, la configuración a través de ficheros sí es algo compleja. Esta complejidad supone que la batería de errores suele ser elevada. Resuelves un error y avanzas, pero es raro cuando después de eso no aparecen nuevos errores, esto hace complejo el framework.

Algunos de los errores más comunes que me he encontrado han sido que no recoja documentación, o que no esté leyendo bien un archivo, o problemas con las rutas y dependencias de clases que no encuentra.

Por compensar este punto, es importante saber que existe mucha documentación al respecto que nos ayudará, pero como segunda contrapartida implícita, eres tú quien tiene que filtrar y comprender esa documentación.

Mi consejo si quieres aprender Spring Framework sería comenzar con la lectura de documentación generalista y ver muchos vídeos al respecto antes de empezar a trabajar con la herramienta, creo que puede evitar muchas frustraciones.

Téngase en cuenta que el dominio de este framework no es tarea sencilla. A pesar de que empezar a usarlo no es un reto imposible, tampoco es como empezar a usar Play framework. Si queremos dominar Spring Framework es mejor saber que no es un objetivo cortoplacista.

Cierto es que puedes aprenderlo rápidamente, pero si queremos hacer algo que realmente funcione bien y con una buena configuración, no es tan simple.

Cuando desaconsejo usar Spring Framework

Es importante a tener en cuenta que Spring Framework crea líneas de código autogeneradas internamente, esto supone que la precisión del código nunca será tan fina como la creada a través de un desarrollador. Por así decirlo, la pureza del código se ve afectada con el uso de Spring.

Es por esta razón que existen dos casos muy marcados donde desaconsejaría usar este framework. En primer lugar cuando el proyecto es muy pequeño. En este caso es importante valorar que la configuración de Spring no nos suponga más tiempo que el tiempo que potencialmente puede ahorrarnos. En segundo lugar, desde un punto de vista de eficiencia de proyecto. Hemos dicho que Spring nos ayudará a ser mucho más eficientes en nuestro trabajo, pero nuestro trabajo no será tan eficiente con el uso de Spring debido al código autogenerado previamente mencionado. Es por esta razón que si necesitamos generar un proyecto donde cada ciclo de proceso cuente, creo que es mejor hacerlo manualmente.

 

Oportunidades laborales que Spring Framework está generando

Antes de entrar en las oportunidades laborales, me gustaría recordar una vez más al lector sobre el carácter de opinión del artículo, mis líneas están justificadas con mi experiencia y no con datos.

Dicho esto, debo confesar que desde mi punto de vista Spring está generando grandes oportunidades de trabajo. El dominio de este framework supone un claro elemento diferenciador entre los desarrolladores ya que supone trabajar con un plus de eficiencia y orden en el código.

Reconozco que cuando los recruiters y headhunters tratan de llamar a mi puerta, el 60% de las ocasiones ponen un énfasis especial en el nivel de dominio de Spring Framework.

A fin de cuentas, el uso de Spring está vinculado a un trabajo más limpio, sencillo y eficiente ¿por qué no usarlo?

 

Conclusiones

Por último, me gustaría ofrecerte algunas conclusiones resumen del artículo. Espero que mi punto de vista te haya sido de ayuda.

  • + Ayuda a reducir gran número de líneas de código
  • + Facilita también la gestión de base de datos
  • + Es especialmente útil a la hora de desarrollar servicios web sobre REST API (Spring-mvc)
  • +Gran cantidad de librerías y módulos disponibles
  • +Reduce los tiempos de desarrollo
  • +Ayuda a tener flexibilidad en el proyecto
  • +Es una herramienta muy extensa, compuesta por muchos módulos relativamente independientes
  • -El dominio de Spring Framework supone tiempo
  • -Es complejo dominar todos los módulos

Álvaro Mateos, desarrollador Java AurigaeCashware.