¿Que es la inyección de dependencias?

Literalmente copiado de la Wikipedia; la Inyección de Dependencias (en inglés Dependency Injection, DI) es un patrón de diseño orientado a objetos, en el que se suministran objetos a una clase en lugar de ser la propia clase quien cree el objeto.

Dicho en otras palabras, si una clase necesita realizar operaciones cuya funcionalidad la proporcionan otras clases, es el desarrollador quien le inyecta los objetos necesarios para realizar dichas operaciones, de esta manera cuando se utilice la clase ésta ya contara con todo lo necesario para su correcto funcionamiento. Esto es a muy alto nivel es el concepto de inyección de dependencias.
A continuación se muestra el código de un ejemplo donde se realiza inyección de dependencias.

Ejemplo de DI

En este ejemplo, se podría haber creado una clase Auto, Bicicleta y Motocicleta con su respectivo método rodar(), crear una instancia (objeto) de la clase e invocarlo desde el método principal main(). Pero se optó por implementar polimorfismo con ayuda de una interface IVehiculo; de esta manera se pueden agregar más tipos de vehículos (Tractor, Trailer, etc.) y solamente implementar su método rodar() el cual todos comparten en común.

La idea de utilizar una interface va más allá de la funcionalidad descrita previamente; utilizar inyección de dependencias. La clase RodarVehiculo permite invocar el método rodar() de cualquier tipo de vehículo, basta con proporcionárselo (inyectarlo) previamente. De hecho RodarVehiculo podría invocar cualquier otro método de la interface IVehiculo, como se puede observar esta clase no necesita crear la instancia de ninguna clase particular puesto que ya se le está inyectando previamente, basta con usar los métodos de la clase.

package com.notasprogramacion.di.ejemplo1;

public interface IVehiculo {
	public void rodar();
}

package com.notasprogramacion.di.ejemplo1;

public class Auto implements IVehiculo {

	@Override
	public void rodar() {
		System.out.println("Soy un Auto y estoy rodando...");
	}

}


package com.notasprogramacion.di.ejemplo1;

public class Motocicleta implements IVehiculo {

	@Override
	public void rodar() {
		System.out.println("Soy una Motocicleta y estoy rodando...");
	}

}

package com.notasprogramacion.di.ejemplo1;

public class Bicicleta implements IVehiculo {

	@Override
	public void rodar() {
		System.out.println("Soy un Bicicleta y estoy rodando...");
	}

}

package com.notasprogramacion.di.ejemplo1;

public class RodarVehiculo {

	IVehiculo vehiculo;

	public RodarVehiculo() {
		
	}

	public void setVehiculo(IVehiculo vehiculo) {
		this.vehiculo = vehiculo;
	}
	
	public void rodar() {
		this.vehiculo.rodar();
	}
}

package com.notasprogramacion.di.ejemplo1;

public class EjemploDI {

	public static void main(String[] args) {
		RodarVehiculo rodarVehiculo = new RodarVehiculo();
		
		IVehiculo bicicleta = new Bicicleta();		
		rodarVehiculo.setVehiculo(bicicleta); //Inyeccion de dependencia
		rodarVehiculo.rodar();
		
		IVehiculo motocicleta = new Motocicleta();		
		rodarVehiculo.setVehiculo(motocicleta); //Inyeccion de dependencia
		rodarVehiculo.rodar();
		
		IVehiculo auto = new Auto();		
		rodarVehiculo.setVehiculo(auto); //Inyeccion de dependencia
		rodarVehiculo.rodar();
		
	}

}

Descarga del codigo fuente

Si deseas obtener los archivos de código fuente del ejemplo, desde GitHub te los puedes descargar: desde aquí, hay varios ejemplos, la carpeta de este tutorial se llama InyeccionDependencias.

El ejemplo que he expuesto anteriormente de inyeccion de dependencias es muy sencillo y solo lo he utilizado para ejemplificar el concepto. Pero la forma habitual de implementar este patrón con un framework como Spring, es mediante un «Contenedor DI»; las dependencias se inyectan mediante un archivo descriptor XML que el desarrollador crea y al levantarse el contexto de la aplicacion (Application Context) es el contenedor quien inyecta a cada objeto los objetos necesarios según las relaciones plasmadas en dicho fichero XML de configuración.

En un articulo posterior a este especificare en donde se esta realizando la inyeccion de dependencias en un ejemplo con el framework Spring. Si te gusto el tutorial no olvides dar like, así me motivas a continuar escribiendo sobre estos temas.

Saludos.

Una respuesta to “¿Que es la inyección de dependencias?

Deja una respuesta

Tu dirección de correo electrónico no será publicada.