Autoensamblado de Beans en Spring Framework

Autoensamblado de Beans en Spring

El autoansamblado (autowiring) en Spring permite al framework inyectar automáticamente dependencias en los beans sin configuración explícita. Spring ofrece tres métodos de ensamblaje:

  1. Configuración explícita mediante XML.
  2. Configuración explícita con anotaciones de Java.
  3. Autoensamblaje implícito (enfoque principal de este artículo).

Implementación Práctica

Código Base: Un objeto Persona con mascotas

Clase para un gato doméstico:

package com.ejemplo.animales;

public class Gato {
    public void emitirSonido() {
        System.out.println("Miau~");
    }
}

Clase para un perro doméstico:

package com.ejemplo.animales;

public class Perro {
    public void emitirSonido() {
        System.out.println("Guau~");
    }
}

Clase principal que representa a una persona con mascottas:

package com.ejemplo.entidades;

import com.ejemplo.animales.Gato;
import com.ejemplo.animales.Perro;

public class Individuo {
    private String nombre;
    private Gato mascotaFelina;
    private Perro mascotaCanina;

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public Gato getMascotaFelina() {
        return mascotaFelina;
    }

    public void setMascotaFelina(Gato mascotaFelina) {
        this.mascotaFelina = mascotaFelina;
    }

    public Perro getMascotaCanina() {
        return mascotaCanina;
    }

    public void setMascotaCanina(Perro mascotaCanina) {
        this.mascotaCanina = mascotaCanina;
    }

    @Override
    public String toString() {
        return "Individuo{" +
                "nombre='" + nombre + '\'' +
                ", mascotaFelina=" + mascotaFelina +
                ", mascotaCanina=" + mascotaCanina +
                '}';
    }
}

Clase de prueba para verificar el ensamblaje:

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.ejemplo.entidades.Individuo;

public class PruebaAutoensamblado {
    @Test
    public void verificarInyeccion() {
        ApplicationContext contexto = new ClassPathXmlApplicationContext("configuracion.xml");
        Individuo persona = contexto.getBean("usuarioEjemplo", Individuo.class);
        persona.getMascotaFelina().emitirSonido();
        persona.getMascotaCanina().emitirSonido();
    }
}

Configuración del Ensamblaje

Ensamblaje Manual: Especifica explícitamente las referencias a los beans.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
  https://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="gatoBean" class="com.ejemplo.animales.Gato"/>
    <bean id="perroBean" class="com.ejemplo.animales.Perro"/>
    <bean id="usuarioEjemplo" class="com.ejemplo.entidades.Individuo">
        <property name="mascotaFelina" ref="gatoBean"/>
        <property name="mascotaCanina" ref="perroBean"/>
    </bean>
</beans>

Autoensamblaje por Nombre (byName): Inyecta beans cuyo ID coincide con el nombre del atributo. Requiere que exista un único bean con ese nombre.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
  https://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="mascotaFelina" class="com.ejemplo.animales.Gato"/>
    <bean id="mascotaCanina" class="com.ejemplo.animales.Perro"/>
    <bean id="usuarioEjemplo" class="com.ejemplo.entidades.Individuo" autowire="byName"/>
</beans>

Autoensamblaje por Tipo (byType): Busca beans con un tipo compatible. Necesita que no haya más de un bean del mismo tipo.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
  https://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean class="com.ejemplo.animales.Gato"/>
    <bean class="com.ejemplo.animales.Perro"/>
    <bean id="usuarioEjemplo" class="com.ejemplo.entidades.Individuo" autowire="byType"/>
</beans>

El ensamblaje manual exige declarar cada dependencia en la configuración. En contraste, el autoensamblaje por nombre simplifica el proceso al emparejar IDs con atributos, siempre que los beans sean únicos. El autoensamblaje por tipo infiere la inyección basándose en la compatibilidad de clases, asegurando que no haya ambigüedades.

Etiquetas: Spring java autowiring beans xml-configuration

Publicado el 6-12 19:59