La función de cableado automático del marco de primavera le permite inyectar la dependencia del objeto implícitamente. Utiliza internamente inyección de setter o constructor.
El cableado automático no se puede utilizar para inyectar valores primitivos y de cadena. Funciona solo 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 de programador.
No se puede usar para valores primitivos y de cadena.
Modos de cableado automático
Hay muchos modos de cableado automático:
No. | Modo | Descripción |
---|---|---|
1) | no | Es el modo de cableado automático predeterminado. Significa que no hay cableado automático por defecto. |
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 lo 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 Spring 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
- applicationContext.xml
- Test.java
B.java
Esta clase solo contiene un constructor y un método.
paquete org.sssit; public class B {B () {System.out.println («b se crea»);} void print () {System.out.println («hola b»);}}
A.java
Esta clase contiene la referencia de la clase B y el constructor y el método.
paquete org.sssit; clase pública A {B b; A () {System.out.println («se crea a»);} public B getB () {return b; } public void setB (B b) {this.b = b; } void print () {System.out.println («hola a»);} void display () {print (); b.print (); }}
applicationContext.xml
xml version = "1.0" encoding = "UTF-8"?>
Test.java
Esta clase obtiene el bean del archivo applicationContext.xml y llama al método de visualización.
paquete org.sssit; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; Prueba de clase pública {public static void main (String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext («applicationContext.xml»); A a = context.getBean («a», A.class); una pantalla(); }}
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 iguales.
Utiliza internamente inyección de incubadora.
Pero, si cambia el nombre del bean, no inyectará la dependencia.
Veamos el código donde estamos cambiando 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 solo un bean de un tipo.
Utiliza internamente inyección de incubadora.
En este caso, funciona bien porque ha creado una instancia de tipo B. No importa que tenga un nombre de bean diferente al de referencia.
Pero, si tiene varios beans de un tipo, no funcionará y lanzará una excepción.
Veamos el código donde hay muchos beans de tipo B.
En tal caso, arrojará una excepción.
3) modo de cableado automático del constructor
En el caso del modo de cableado automático del constructor, el contenedor de resorte inyecta la dependencia del constructor parametrizado más alto.
Si tiene 3 constructores en una clase, zero-arg, one-arg y two-arg, la inyección se realizará llamando al constructor de dos argumentos.
4) sin modo de cableado automático
En caso de que no haya modo de cableado automático, el contenedor de resorte no inyecta la dependencia mediante el cableado automático.