Los componentes/clases de Java deben ser lo más independientes posible de otras clases de Java. Esto aumenta la posibilidad de reutilizar estas clases y probarlas independientemente de otras clases (Pruebas Unitarias). Para desacoplar los componentes de Java de otros componentes de Java, la dependencia a una cierta otra clase debe ser inyectada en ellos en lugar de que la clase misma cree/encuentre este objeto.
La clase A tiene una dependencia a la clase B si la clase A usa la clase B como variable.
Si se usa la inyección de dependencia, la clase B se otorga a la clase A a través del constructor de la clase A; esto se denomina inyección de construcción; o a través de un setter - esto se llama setter injection
El concepto general de inyección de dependencia se llama Inversión de control. Una clase no debe configurarse, sino que debe configurarse desde el exterior.
Un diseño basado en clases/componentes independientes aumenta la posibilidad de volver a utilizar y la posibilidad de probar el software. Por ejemplo, si una clase A espera un Dao (Objeto de acceso a datos) para recibir datos de una base de datos, puede crear fácilmente otro objeto de prueba que se burla de la conexión de base de datos e inyectar este objeto en A para probar A sin tener una conexión de base de datos real.
Un diseño de software basado en inyección de dependencia es posible con Java estándar.
Spring solo agrega algunas simplificaciones en el uso de la inyección de dependencia al proporcionar una forma estándar de proporcionar la configuración y administrar la referencia a los objetos creados.
Cuando primavera inicializa su contexto se crea todos los beans definidos en el archivo ansiosos context.xml aplicación primavera. Supongamos ahora que su Bean A tiene dependencia de B, entonces Obj of B ya está con Spring, ya que se ha creado con éxito durante la inicialización de Spring. Entonces Spring buscará el método setter en la clase A y establecerá B's Obj allí.
puede leer el código ya que es de código abierto. –
@Preet de todos modos lo estoy leyendo. solo quiero una descripción general. –
"recibí la respuesta en otro lugar, la respuesta es instrumentación bytecode". - No, no es. Spring en el 95% utiliza Reflection API.La instrumentación del Código de bytes se usa solo para tipos especializados de inyección, como la inyección de búsqueda de métodos. –