2010-09-16 8 views
16

Quiero saber cómo la primavera hace la inyección de dependencia. Quiero la lógica de bajo nivel utilizada.¿Cómo funciona la inyección de dependencia en Spring?

actualizaciones:

que quiero saber cómo se inyectan las referencias a objetos a los constructores o métodos setter, es a través de la reflexión o algún nivel de código de bytes.

+5

puede leer el código ya que es de código abierto. –

+0

@Preet de todos modos lo estoy leyendo. solo quiero una descripción general. –

+2

"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. –

Respuesta

9

configuración de dependencias se leen desde XML, anotaciones o Java DSL (JavaConfig). Luego, el motor Spring DI conecta las dependencias en función de los metadatos de la configuración utilizando la API de reflexión de Java.

+2

quiero saber cómo se conecta la dependencia. –

+1

Usando la API de reflexión de Java. Agregué esa información a las respuestas. –

+1

Al usar la API de reflexión de Java, Spring comprenderá que tiene que insertar una dependencia en ese punto en particular, pero ¿cómo se inserta exactamente esta dependencia? es un cambio de nivel de código de bytes? – flash

13

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.

Para más leído this

Edit1:

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í.

Edit2:

Please read 5.4.1 Setter Injection

+0

¿Por qué -1 ??? ???? –

+2

le pregunto "cómo se está inyectando en el constructor" –

+0

@Suresh S editado –

Cuestiones relacionadas