logo

Autocableado en primavera

La función de cableado automático de Spring Framework le permite inyectar la dependencia del objeto implícitamente. Utiliza internamente inyección setter o constructor.

El cableado automático no se puede utilizar para inyectar valores primitivos y de cadena. Funciona sólo con referencia.


Ventaja del cableado automático

Requiere el menos código porque no necesitamos escribir el código para inyectar la dependencia explícitamente.


Desventaja del cableado automático

Sin control del programador.

No se puede utilizar para valores primitivos y de cadena.


Modos de cableado automático

Hay muchos modos de cableado automático:

java leyendo csv
No.ModoDescripción
1)noEs el modo de cableado automático predeterminado. Significa que no hay cableado automático de forma predeterminada.
2)por nombreEl modo byName inyecta la dependencia del objeto según el nombre del bean. En tal caso, el nombre de la propiedad y el nombre del bean deben ser iguales. Llama internamente al método setter.
3)por tipoEl modo byType inyecta la dependencia del objeto según el tipo. Por tanto, el nombre de la propiedad y el nombre del bean pueden ser diferentes. Llama internamente al método setter.
4)constructorEl modo constructor inyecta la dependencia llamando al constructor de la clase. Llama al constructor que tiene una gran cantidad de parámetros.
5)detección automáticaEstá en desuso desde la primavera 3.

Ejemplo de cableado automático

Veamos el código simple para usar el cableado automático en primavera. Debe utilizar el atributo autowire del elemento bean para aplicar los modos de autowire.

 

Veamos el ejemplo completo de cableado automático en primavera. Para crear este ejemplo, hemos creado 4 archivos.

  1. B.java
  2. A.java
  3. aplicaciónContext.xml
  4. Test.java
B.java

Esta clase contiene únicamente un constructor y un método.

 package org.sssit; public class B { B(){System.out.println('b is created');} void print(){System.out.println('hello b');} } 
A.java

Esta clase contiene referencias de la clase B, el constructor y el método.

 package org.sssit; public class A { B b; A(){System.out.println('a is created');} public B getB() { return b; } public void setB(B b) { this.b = b; } void print(){System.out.println('hello a');} void display(){ print(); b.print(); } } 
aplicaciónContext.xml
 
Test.java

Esta clase obtiene el bean del archivo applicationContext.xml y llama al método de visualización.

 package org.sssit; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext('applicationContext.xml'); A a=context.getBean('a',A.class); a.display(); } } 

Producción:

 b is created a is created hello a hello b 

1) modo de cableado automático byName

En el caso del modo de cableado automático byName, la identificación del bean y el nombre de referencia deben ser los mismos.

Utiliza internamente inyección setter.

 

Pero, si cambia el nombre del bean, no inyectará la dependencia.

Veamos el código donde cambiamos el nombre del bean de b a b1.

 

2) modo de cableado automático por tipo

En el caso del modo de cableado automático byType, la identificación del bean y el nombre de referencia pueden ser diferentes. Pero debe haber sólo un frijol de un tipo.

escribe json en el archivo python

Utiliza internamente inyección setter.

 

En este caso, funciona bien porque has creado una instancia de tipo B. No importa que tenga un nombre de bean diferente al nombre de referencia.

Pero, si tiene varios beans de un tipo, no funcionará y generará una excepción.

Veamos el código donde hay muchos beans de tipo B.

 

En tal caso, generará una excepción.


3) modo de cableado automático del constructor

En el caso del modo de cableado automático del constructor, el contenedor Spring inyecta la dependencia del constructor parametrizado más alto.

Si tiene 3 constructores en una clase, argumento cero, argumento uno y argumento dos, la inyección se realizará llamando al constructor de dos argumentos.

 

4) no autowiring mode

En caso de que no haya modo de cableado automático, el contenedor Spring no inyecta la dependencia mediante el cableado automático.