Inyección de Dependencias en Spring

Introducción a la Inyección de Dependencias

Configuración Básica de Inyección

Método Constructor

En configuraciones previas, se ha mencionado el uso del constructor para inyectar dependencias. Para más detalles, revisa los métodos de creación de objetos mediante IOC.

Inyección por Setter

  • Dependencia: La creación del objeto bean depende del contenedor.
  • Inyección: Las propiedades del objeto bean son asignadas por el contenedor.

Configuración del Entorno

  1. Tipos Complejos
public class Ubicacion {
    private String direccion;

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }
}

  1. Clase de Prueba
@Data
public class Alumno {
    private String nombre;
    private Ubicacion ubicacion;
    private String[] libros;
    private List<String> aficiones;
    private Map<String, String> documentos;
    private Set<String> deportes;
    private String cónyuge;
    private Properties datos;
}

Se empleó Lombok para generar automáticamente los métodos getter y setter.

3.Configuración XML

<?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="alumno" class="com.ejemplo.pojo.Alumno">
        <property name="nombre" value="Ejemplo"/>
    </bean>

</beans>

4.Clase de Test

public static void main(String[] args) {
    ApplicationContext contexto = new ClassPathXmlApplicationContext("configuracion.xml");

    Alumno alumno = (Alumno) contexto.getBean("alumno");
    System.out.println(alumno.getNombre());
}

Inyección Completa

<?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="ubicacion" class="com.ejemplo.pojo.Ubicacion">
        <property name="direccion" value="Ciudad de Ejemplo"/>
    </bean>
    <bean id="alumno" class="com.ejemplo.pojo.Alumno">
        <property name="nombre" value="Ejemplo"/>
        <property name="ubicacion" ref="ubicacion"/>
        <property name="libros">
            <array>
                <value>Libro 1</value>
                <value>Libro 2</value>
            </array>
        </property>
        <property name="aficiones">
            <list>
                <value>Lectura</value>
                <value>Escribir</value>
            </list>
        </property>
        <property name="documentos">
            <map>
                <entry key="DNI" value="12345678A"/>
                <entry key="Pasaporte" value="AB123456C"/>
            </map>
        </property>
        <property name="deportes">
            <set>
                <value>Fútbol</value>
                <value>Baloncesto</value>
            </set>
        </property>
        <property name="cónyuge">
            <null/>
        </property>
        <property name="datos">
            <props>
                <prop key="sitio">http://localhost:8080</prop>
                <prop key="usuario">admin</prop>
                <prop key="clave">abcdef</prop>
            </props>
        </property>
    </bean>

</beans>

Métodos Avanzados de Inyección

Se pueden usar espacios de nombres 'c' y 'p' para simplificar la inyección.

Primero, importa las dependencias:

xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"

El espacio de nombres 'p' facilita la inyección por setter. Anteriormente, podías escribir:

<bean name="clásico" class="com.ejemplo.EjemploBean">
    <property name="correo" value="ejemplo@ejemplo.com"/>
</bean>

Con el espacio de nombres 'p':

<bean name="p-espacio" class="com.ejemplo.EjemploBean" p:correo="ejemplo@ejemplo.com"/>

Nota: Los espacios de nombres 'c' y 'p' requieren importar las restricciones correspondientes.

Ámbito de los Beans

1.Modo Singleton (por defecto en Spring)

2.Modo Prototype: Cada vez que se obtiene del contenedor, se crea un nuevo objeto.

3.Otros modos aplicables en desarrollo web.

Etiquetas: Spring InyeccionDeDependencias lombok XMLConfiguration

Publicado el 8-21 04:51