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>