¿Qué es Spring Framework? Características I

Dic 18 2019

Por Javier Cuervas

Este artículo pretende mostrar las principales características que Spring Framework provee así como su estructura y módulos en los que se compone. Aunque cada vez está más extendido el uso de Spring Boot como alternativa a Spring Framework por su simplicidad y ahorro de configuración, es interesante entender cómo funciona Spring y cómo se estructura, ya que aún existen muchas empresas que utilizan Spring Framework. 

Origen 

SpringFramework (creado por Rod Johnson en 2004) es una herramienta que nace con la intención de simplificar y facilitar la construcción de aplicaciones JEE. El problema de rendimiento al utilizar los EJB en JEE hizo buscar una solución para mejorar y agilizar el desarrollo de aplicaciones Java. 

 

Aunque con el tiempo JEE mejoró considerablemente, ya todo el mundo estaba familiarizado con Spring y es el que hoy día se viene utilizando en mayor medida. 

Ventajas 

El uso de Spring en nuestros desarrollos tiene numerosas ventajas, entre ellas: 

- Inyección de dependencia (DI): técnica o patrón de diseño utilizado como una de las formas de inversión de control (IOC) para favorecer el bajo acoplamiento. Es decir, cuando una clase necesita de otra clase (dependencia), en lugar de crear el objeto dentro de la propia clase, Spring se lo suministra o inyecta. Esta forma de IOC sigue el principio de Hollywood (no nos llames, nosotros te llamamos) en el que la aplicación es la que toma el control en lugar del código, aportando los siguientes beneficios: 

  • Proporciona modularidad. 
  • Escalabilidad de la aplicación sin necesidad de modificar las clases. 
  • Evita la dependencia entre clases 

- Desarrollo sencillo con POJOs (Plan Old Java Objects) 

- Minimiza el código repetitivo 

- Simplifica el acceso a datos gracias a los ORM (Object Relational Mapping) 

- Programación Orientada a Aspectos (AOP): Permite una modularización mucho más alta para hacer una separación muy clara de las diferentes tareas que debe realizar cada clase en nuestra aplicación. 

Contenedor o dispatcher 

Spring mediante un contenedor (Servlet) o dispatcher, proporciona los objetos o Beans que se le va solicitando. Este contenedor utiliza un archivo de configuración que puede ser definido de 3 formas diferentes: 

  1. Archivo de configuración XML.
  2. Java Source Code.
  3. Java Annotations. 

Estructura y Módulos 

En la siguiente imagen se pueden ver todos los módulos que integra Spring: 

 

El módulo principal viene a ser el núcleo o Core que se encarga de: 

  • La creación y gestión de los Beans 
  • Lectura de ficheros config 
  • Manejo de propiedades y dependencias 
  • Uso del contexto como almacén de los Beans en memoria 
  • Spring Expression Language para manipular objetos en tiempo de ejecución 

 

En el módulo de Infraestructura estarían los sub-módulos de  AOP, Aspects, Instrumentation y Messaging, donde se manejan las transacciones, logueos, seguridad de las aplicaciones, etc. 

 

En el módulo de acceso a datos, se utilizan frameworks ORM como Hibernate y JPA, se utiliza una versión de JDBC con menos código y más sencillo de utilizar gracias a las helper clases. Por otro lado incluye el módulo de JMS (Java Messaging Service) para el manejo de mensajes en Java (colas o tópicos), reducción de llamadas a bases de datos gracias al módulo de Transactions

El módulo Web/MVC nos permitirá la programación web distribuida, acceso remoto y utilizar tecnologías como JSF o Struts. 

Por último, el módulo de pruebas incluye los Mock Objects, que son objetos simulados para poder realizar pruebas en aplicaciones Java. 

Estructura de un proyecto en Spring 

Para un proyecto simple de tipo stand alone que realice algunas operaciones en base de datos con JDBC, la estructura del proyecto tendría este aspecto: 

 

 

Por otro lado, en la siguiente imagen se puede apreciar la estructura de un proyecto Spring web de tipo MVC: 
 

Librerías o dependencias 

En función de las especificaciones de nuestra aplicación deberemos descargar las dependencias o librerías específicas para ello. En principio, para una aplicación sencilla stand alone, bastaría con las siguientes librerías: 

 

 

Si quisiéramos añadir el módulo web, es necesario añadir las librerías correspondientes: 

 

Fichero de configuración XML 

En principio podemos nombrar el fichero de cualquier forma ya que luego le indicaremos a Spring qué fichero de configuración debe cargar. A continuación se muestra el aspecto de un fichero de configuración: 

 

Clase principal con el método main() 

Para hacer uso del contenedor de Spring  en los proyectos de tipo stand alone tenemos que crear un objeto de tipo ApplicationContext que nos permitirá recuperar objetos Bean mediante su ID o nombre de la clase. En función de si el fichero de configuración es un XML o una clase Java, instanciaremos un contexto u otro, tal y como se muestra a continuación: 

 

Liberar recursos del contexto 

Para permitir liberar recursos se debe realizar un casteo al tipo ConfigurableApplicationContext: 

              ((ConfigurableApplicationContext)appContext).close(); 

Continuará...

Javier Cuervas


Comparte este artículo

Utilizamos cookies propias y de terceros para ofrecerte una mejor experiencia y servicio, dentro de nuestra Web de acuerdo a tus hábitos de navegación. Si continúas navegando, consideramos que aceptas expresamente su utilización. Puedes obtener más información de cómo gestionar y configurar las cookies en nuestra Política de Cookies.