Creación de Objetos con Inyección de Dependencias por Constructor en Spring IoC

Implementación Base

Se definen interfaces y clases de ejemplo para simular un acceso a datos y un servicoi.

Interfaz para el repositorio de datos:

package com.ejemplo.dao;

public interface CambioUsuarioDAO {
    void recuperarUsuario();
}

Implementaciones de la interfaz para distintas fuentes de datos:

package com.ejemplo.dao;

public class ImplementacionMySQLCambioUsuarioDAO implements CambioUsuarioDAO {
    @Override
    public void recuperarUsuario() {
        System.out.println("Obteniendo usuario desde MySQL.");
    }
}

public class ImplementacionOracleCambioUsuarioDAO implements CambioUsuarioDAO {
    @Override
    public void recuperarUsuario() {
        System.out.println("Obteniendo usuario desde Oracle.");
    }
}

Interfaz del servicio de negocio:

package com.ejemplo.servicio;

public interface ServicioUsuario {
    void ejecutar();
}

Implementación del servicio con dependencia inyectada por constructor:

package com.ejemplo.servicio;

import com.ejemplo.dao.CambioUsuarioDAO;

public class ImplementacionServicioUsuario implements ServicioUsuario {
    private CambioUsuarioDAO dao;

    public ImplementacionServicioUsuario() {
        System.out.println("Constructor sin parámetros de ImplementacionServicioUsuario.");
    }

    public ImplementacionServicioUsuario(CambioUsuarioDAO dao) {
        this.dao = dao;
    }

    public void establecerDao(CambioUsuarioDAO dao) {
        this.dao = dao;
    }

    @Override
    public void ejecutar() {
        dao.recuperarUsuario();
    }
}

Clase principal para probar la configuración:

package com.ejemplo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ejemplo.servicio.ServicioUsuario;

public class AplicacionPrincipal {
    public static void main(String[] args) {
        ApplicationContext contexto = new ClassPathXmlApplicationContext("configuracion.xml");
        ServicioUsuario servicio = (ServicioUsuario) contexto.getBean("servicioUsuarioBean");
        servicio.ejecutar();
    }
}

Métodos de Configuración por Constructor

1. Inyección por índice de posición: Se utiliza el atributo index para referenciar el orden del parámetro en el constructor, empezando desde 0.

<!-- Configuración por índice -->
<bean id="servicioUsuarioBean" class="com.ejemplo.servicio.ImplementacionServicioUsuario">
    <constructor-arg index="0" ref="daoOracle"/>
</bean>

2. Inyección por tipo de dato: Se usa el atributo type para asignar el valor al parámetro cuyo tipo coincida con el especificado.

<!-- Configuración por tipo -->
<bean id="servicioUsuarioBean" class="com.ejemplo.servicio.ImplementacionServicioUsuario">
    <constructor-arg type="com.ejemplo.dao.CambioUsuarioDAO" ref="daoMySQL"/>
</bean>

3. Inyección por nombre de parámetro: Mediante el atributo name, se asigna la dependencia al parámetro con el nombre indicado en el constructor.

<!-- Configuración por nombre -->
<bean id="servicioUsuarioBean" class="com.ejemplo.servicio.ImplementacionServicioUsuario">
    <constructor-arg name="dao" ref="daoOracle"/>
</bean>

Etiquetas: Spring Framework Inyección de Dependencias Constructor Inyección configuración XML contenedor IoC

Publicado el 7-5 23:28