Fundamentos de Spring Framework: Inversión de Control, AOP e Integración de Datos

Introducción a Spring Framwork

Spring es un framework de código abierto, ligero y no intrusivo, diseñado para simplificar el desarrollo de aplicaciones Java. Sus pilares fundamentales son la Inversión de Control (IOC) y la Programación Orientada a Aspectos (AOP). Además, ofrece un soporte robusto para la gestión de transacciones y la integración con diversos frameworks del ecosistema Java.

  • Spring Boot: Una extensión que facilita el desarrollo rápido mediante la filosofía de "convención sobre configuración".
  • Spring Cloud: Basado en Spring Boot, proporciona herramientas para sistemas distribuidos y microservicios.

Inversión de Control (IOC)

La Inversión de Control es un principio de diseño donde el flujo de control de un programa se invierte en comparación con la programación tradicional. En lugar de que el programador cree manualmente los objetos y gestione sus dependencias (acoplamiento fuerte), el contenedor de Spring se encarga de instanciarlos y ensamblarlos.

La Inyeción de Dependencias (DI) es el mecanismo principal para implementar IOC. A continuación, se muestra un ejemplo de cómo desacoplar la lógica mediante un método Setter:

public class ServicioProcesamiento {
    private RepositorioDatos repositorio;

    // Inyección mediante Setter para flexibilidad dinámica
    public void setRepositorio(RepositorioDatos repositorio) {
        this.repositorio = repositorio;
    }

    public void ejecutar() {
        repositorio.obtenerInformacion();
    }
}

Configuración de Beans en Spring

Un Bean es un objeto instanciado, ensamblado y gestionado por el contenedor de Spring. Existen varias formas de definir cómo se crean estos objetos:

Instanciación por Constructor

Se pueden pasar argumentos al constructor mediante indexación, tipo de dato o nombre del parámetro en el archivo de configuración XML:

<!-- Configuración por nombre de argumento -->
<bean id="usuarioServicio" class="com.ejemplo.UsuarioServiceImpl">
    <constructor-arg name="nombreApp" value="PortalVentas"/>
</bean>

Ámbitos de un Bean (Scopes)

  • Singleton: (Por defecto) Una única instancia por contenedor.
  • Prototype: Una nueva instancia cada vez que se solicita el bean.
  • Web Scopes: Request, Session y Application (específicos para entornos web).

Autowiring: Cableado Automático

Spring puede resolver dependencias automáticamente analizando el contenido del ApplicationContext.

  • byName: Busca un bean con el mismo nombre que la propiedad.
  • byType: Busca un bean cuya clase coincida con el tipo de la propiedad.

Uso de Anotaciones

A partir de Spring 2.5, es posible usar anotaciones para reducir la verbosidad del XML:

  • @Autowired: Inyecta la dependencia por tipo. Si hay ambigüedad, se combina con @Qualifier.
  • @Resource: Inyecta principalmente por nombre (estándar JSR-250).
  • @Component: Marca una clase para ser detectada automáticamente (incluye derivados como @Service, @Repository y @Controller).

Configuración Basada en Java (JavaConfig)

En versiones modernas y Spring Boot, se prefiere evitar el XML en favor de clases de configuración Java:

@Configuration
@ComponentScan("com.sistema.modulos")
public class AppConfig {

    @Bean
    public GestorSeguridad gestorSeguridad() {
        return new GestorSeguridadImpl();
    }
}

Programación Orientada a Aspectos (AOP)

AOP permite separar las funcionalidades transversales (cross-cuting concerns) de la lógica de negocio principal. Ejemplos comunes son la gestión de logs, seguridad y transacciones.

Conceptos clave:

  • Aspecto (Aspect): El módulo que encapsula el comportamiento transversal.
  • Consejo (Advice): La acción realizada (Before, After, Around).
  • Punto de Corte (Pointcut): Expresión que define en qué métodos se aplicará el aspecto.
  • Tejido (Weaving): Proceso de vincular aspectos con los objetos de la aplicación.

Integración con MyBatis y Transacciones

La integración de Spring con MyBatis permite gestionar la persistencia de datos de forma limpia, delegando la creación de SqlSessionFactory y el manejo de sesiones al contenedor.

Transacciones Declarativas

Spring permite gestionar transacciones de forma declarativa mediante AOP, asegurando que se cumplan las propiedades ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad):

<!-- Configuración típica del gestor de transacciones -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="miDataSource" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

Al utilizar la anotación @Transactional, Spring garantiza que si ocurre una excepción durante la ejecución del método, los cambios en la base de datos se reviertan automáticamente (rollback), manteniendo la integridad de la información.

Etiquetas: spring-framework IOC AOP dependency-injection MyBatis

Publicado el 7-9 06:17