Está en la página 1de 15

INYECCIÓN DE

DEPENDENCIA
S EN JAVA
INTEGRANTES:
Ariza Jhon Alexander
Cruz Pachón Jose Efrain
Gaona Yesicarolina
Gonzalez Kevin Andres
Osorio Chaparro Daisy Paola
Parraga Garcia Brayan Nicolas
Romero Ascanio Kristian David
INYECCIÓN DE DEPENDENCIAS EN JAVA
La inversión de dependencias describe un conjunto de técnicas destinadas a disminuir el acoplamiento entre los
componentes de una aplicación. Es uno de los principios SOLID más populares y utilizados en la creación de
aplicaciones, frameworks y componentes por las ventajas que aporta a las mismas. También se conoce como
inversion de control. En inglés, los términos más frecuentemente utilizados son "dependency inversion", abreviado
como "DI", e "inversion of control" o simplemente "IoC".

La inyección de dependencias es una de las técnicas utilizadas para implementar el principio de inversión de
dependencias.

Java es un lenguaje orientado a objetos, Al igual que cualquier otro lenguaje orientado a objetos, las clases y los
objetos son la base de cualquier funcionalidad que podamos escribir y usar. Las relaciones entre las clases y/u
objetos permiten ampliar y reutilizar la funcionalidad
¿QUÉ ES UNA
DEPENDENCIA
?
Cuando una clase ClassA usa cualquier método de otra claseClassB, podemos decir
que ClassB es una dependencia deClassA.
En este ejemplo, ClassA está calculando el 10% del valor, y
calculando ese valor, está reutilizando la funcionalidad expuesta
porClassB.

Y se puede usar así:

Ahora, hay un gran problema con este enfoque:


ClassA está estrechamente acoplada con ClassB
EL PRINCIPIO DE
INYECCIÓN DE
DEPENDENCIAS
Es el poder pasar (inyectar) las dependencias cuando sea necesario en lugar de inicializar
las dependencias dentro de la clase receptora, es desacoplar la construcción de sus
clases
de la construcción de las dependencias de sus clases.
TIPOS DE
INYECCIÓN DE
DEPENDENCIA
01. S EN JAVA
01 02
INYECCIÓN CON
SETTERS (NO
INYECCIÓN CON
CONSTRUCTOR
(ALTAMENTE
RECOMENDADO)
RECOMENDADO)

03 04
INYECCIÓN CON FIELDS
LA APLICACIÓN DE
TAREAS (TODO'S APP)
INYECCIÓN CON SETTERS (NO RECOMENDADO)

El ejemplo anterior es mejor que el enfoque inicial porque ahora podemos inyectar en ClassA una instancia de ClassB o incluso
mejor, una subclase deClassB:
El ejemplo anterior es mejor que el enfoque inicial porque ahora podemos inyectar en ClassA una instancia de ClassB o incluso
mejor, una El problema es con el enfoque de Inyección con Setters:
Estamos ocultando la dependencia ClassB en ClassA porque al leer la firma del constructor, no podemos identificar sus
dependencias de inmediato. El siguiente código provoca una NullPointerException en tiempo de ejecución:
En un lenguaje de tipo estático como Java, siempre es bueno dejar que el compilador nos ayude. Ver Inyección con
Constructor
INYECCIÓN CON CONSTRUCTOR (ALTAMENTE
RECOMENDADO)

VENTAJAS:
• La funcionalidad permanece intacta en comparación con
el enfoque de Inyección Setter.
• Eliminamos la inicialización nueva de la ClaseA.
• Todavía podemos inyectar una subclase especializada de
ClassB a ClassA.
• Ahora el compilador nos pedirá las dependencias que
necesitamos en tiempo de compilación.
INYECCIÓN CON FIELDS

Otra forma de inyectar dependencias en Java, y se llama Inyección con Fields. La única manera de que funcione la inyección
de campo es:

• Mutar el campo porque es un campo no privado y no final


• Mutar un campo final / privado usando la reflexión.

Este enfoque tiene los mismos problemas expuestos por el enfoque de Inyección con Setters y además agrega complejidad
debido a la mutación / reflexión requerida. Desafortunadamente, este es un patrón bastante común cuando las personas usan
un Framework de inyección de dependencias.

NOTA:
Cuando una clase ClassA usa cualquier método de otra clase ClassB podemos decir que ClassB es una dependencia de
ClassA.
Si ClassA tiene una dependencia de ClassB, el constructor ClassA debería requerirClassB.
LA APLICACIÓN DE TAREAS (TODO'S APP)
Diseñemos una aplicación de Todo para realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar)
para administrar nuestra lista de tareas, y una arquitectura original puede ser así:

• TodoApp es la clase principal que va a inicializar nuestra aplicación; Puede ser una aplicación de
Android, una página web o una aplicación de escritorio con cualquier marco.
• TodoView es la clase que mostraría una vista para interactuar, esta clase va a delegar los aspectos
relacionados con los datos alTodoHttpClient. Su única responsabilidad es pintar / dibujar / renderizar la
información y obtener la entrada para realizar acciones contra los datos utilizando la dependencia
TodoHttpClient.
• TodoHttpClient es la clase que contiene un conjunto de métodos HTTP para persistir objetos Todo
utilizando una API REST.
• Todo es un objeto de valor que representa un elemento de todo en nuestro almacén de datos.
GRACIAS

También podría gustarte