Cómo entender la inyección de dependencia en Spring
Supongamos que escribe dos clases, una es una clase de persona (Persona) y la otra es una clase de teléfono móvil (Móvil).
La persona a veces necesita hacer llamadas desde un teléfono móvil y necesita utilizar el método dialUp del teléfono.
La forma tradicional de escribir es la siguiente:
Código Java
Persona de clase pública{
makeCall público booleano (número largo) {
Móvil móvil=nuevo Móvil();<
return mobile.dialUp(número);
}
} p>
En otras palabras, el método makeCall de la clase Persona depende de la clase Móvil y debes generar manualmente una nueva instancia de new Mobile() para completar las operaciones posteriores.
El concepto de inyección de dependencia es que cuando una clase (Persona) depende de otra clase (Móvil), la clase (Persona) ya no se instancia en la clase dependiente (Moblile), antes de configurar el bean. .xml, dígale al contenedor que depende de esta clase (Móvil), y el contenedor no podrá crear una instancia de esta clase cuando cree una instancia de esta clase (Persona). Persona), el contenedor inyectará automáticamente una instancia de la clase dependiente (Móvil).
Interfaz:
Código Java
Interfaz pública MobileInterface{
acceso telefónico booleano público (número largo);
}
Clase de persona:
Código Java
Clase pública Persona{
Interfaz móvil privada Interfaz móvil;
public boolean makeCall(long number){
return this.mobileInterface.dialUp(number);
}
public void setMobileInterface(MobileInterface mobileInterface){ p>
this.mobileInterface=mobileInterface;
}
}
Configurar dependencias en archivo xml
Código Java p>
lt;bean id="persona" class="Persona"gt;
lt;property name="mobileInterface"gt;
lt;ref local =" mobileInterface"/gt;
lt;/propertygt;
lt;/beangt;
lt; bean id="mobileInterface" class="Móvil "/ gt;
De esta manera, la clase Persona no conoce la existencia de la clase Móvil cuando implementa realizar llamadas, solo sabe llamar a una interfaz MobileInterface, y la implementación de MobileInterface se completa a través de Mobile; clase Cuando se utiliza MobileInterface, el contenedor inyecta automáticamente MobileInterface, lo que reduce en gran medida la interdependencia entre diferentes clases.