English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La inyección de dependencias (DI) es un patrón de diseño que permite eliminar dependencias del código de programación para facilitar la gestión y prueba de aplicaciones. La inyección de dependencias hace que nuestro código de programación sea más desacoplado. Para entender mejor el DI, primero entendamos la búsqueda de dependencias (DL):
La búsqueda de dependencias es una forma de obtener recursos después de la demanda. Por ejemplo, hay varias formas de obtener recursos:
A obj = new AImpl();
De esta manera, podemos obtener recursos directamente a través de la palabra clave new (una instancia de la clase A). Otra方法是工厂方法:
A obj = A.getA();
De esta manera, obtenemos recursos llamando al método de fábrica estática getA() (una instancia de la clase A).
O, podemos obtener recursos a través de JNDI (Java Naming and Directory Interface). :
Context ctx = new InitialContext(); Context environmentCtx = (Context) ctx.lookup("java:comp"/env); A obj = (A) environmentCtx.lookup("A");
Hay varias formas de obtener recursos para obtener recursos. Veamos los problemas de este método.
Hay principalmente dos problemas de búsqueda de dependencias.
Acoplamiento estricto: La búsqueda de dependencias hace que el código sea muy acoplado. Si se cambia el recurso, se requiere una gran cantidad de modificaciones en el código. La prueba es difícil: Este método puede causar muchos problemas en la prueba de aplicaciones, especialmente en las pruebas de caja negra.
La inyección de dependencias es un patrón de diseño que elimina el código. En este caso, proporcionamos información de una fuente externa (por ejemplo, un archivo XML). Esto hace que nuestro código sea más flexible y más fácil de probar. En este caso, escribimos el código de la siguiente manera:
class Employee{ Address address; Employee(Address address){ this.address=address; } public void setAddress(Address address){ this.address=address; } }
En este caso, la instancia de la clase Address se proporciona por una fuente externa (por ejemplo, un archivo XML) a través del constructor o del método setter.
El marco de Spring proporciona dos métodos para inyectar dependencias
A través del constructor A través del método de setter