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. | Modo | Descripción |
---|---|---|
1) | no | Es el modo de cableado automático predeterminado. Significa que no hay cableado automático de forma predeterminada. |
2) | por nombre | El 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 tipo | El 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) | constructor | El 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ática | Está 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.
- B.java
- A.java
- aplicaciónContext.xml
- Test.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.