logo

Cablejat automàtic a la primavera

La funció de cablejat automàtic del marc de primavera us permet injectar la dependència de l'objecte de manera implícita. Utilitza internament la injecció de setter o constructor.

El cablejat automàtic no es pot utilitzar per injectar valors primitius i de cadena. Funciona només amb referència.


Avantatge del cablejat automàtic

Requereix el menys codi perquè no necessitem escriure el codi per injectar la dependència de manera explícita.


Desavantatge del cablejat automàtic

Sense control del programador.

No es pot utilitzar per a valors primitius i de cadena.


Modes de cablejat automàtic

Hi ha molts modes de cablejat automàtic:

quants zeros hi ha 1.000 milions
No.ModeDescripció
1)noÉs el mode de cablejat automàtic predeterminat. Significa que no hi ha cablejat automàtic per defecte.
2)per nomEl mode byName injecta la dependència de l'objecte segons el nom del bean. En aquest cas, el nom de la propietat i el nom del bean han de ser els mateixos. Crida internament al mètode setter.
3)perTipusEl mode byType injecta la dependència de l'objecte segons el tipus. Per tant, el nom de la propietat i el nom del bean poden ser diferents. Crida internament al mètode setter.
4)constructorEl mode constructor injecta la dependència cridant al constructor de la classe. Crida al constructor que té un gran nombre de paràmetres.
5)auto detectarEstà obsolet des de la primavera 3.

Exemple de cablejat automàtic

Vegem el codi senzill per utilitzar el cablejat automàtic a la primavera. Heu d'utilitzar l'atribut autowire de l'element bean per aplicar els modes de cablejat automàtic.

 

Vegem l'exemple complet de cablejat automàtic a la primavera. Per crear aquest exemple, hem creat 4 fitxers.

  1. B.java
  2. A.java
  3. applicationContext.xml
  4. Test.java
B.java

Aquesta classe només conté un constructor i un mètode.

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

Aquesta classe conté la referència de la classe B i el constructor i el mètode.

 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(); } } 
applicationContext.xml
 
Test.java

Aquesta classe obté el bean del fitxer applicationContext.xml i crida al mètode de visualització.

 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(); } } 

Sortida:

 b is created a is created hello a hello b 

1) mode de cablejat automàtic per nom

En el cas del mode de cablejat automàtic byName, l'identificador del bean i el nom de referència han de ser els mateixos.

Utilitza internament la injecció de setter.

 

Però, si canvieu el nom de bean, no injectarà la dependència.

Vegem el codi on estem canviant el nom del bean de b a b1.

 

2) mode de cablejat automàtic byType

En el cas del mode de cablejat automàtic byType, l'identificador de bean i el nom de referència poden ser diferents. Però només hi ha d'haver una mongeta d'un tipus.

Utilitza internament la injecció de setter.

 

En aquest cas, funciona bé perquè heu creat una instància de tipus B. No importa que tingueu un nom de bean diferent del nom de referència.

Però, si teniu diversos beans d'un mateix tipus, no funcionarà i llançarà una excepció.

aes vs des

Vegem el codi on hi ha molts beans de tipus B.

 

En aquest cas, llançarà una excepció.


3) mode de cablejat automàtic del constructor

En el cas del mode de cablejat automàtic del constructor, el contenidor de molles injecta la dependència pel constructor amb el paràmetre més alt.

Si teniu 3 constructors en una classe, zero-arg, one-arg i two-arg, la injecció es realitzarà cridant al constructor de dos arguments.

 

4) no autowiring mode

En cas que no hi hagi cap mode de cablejat automàtic, el contenidor de molla no injecta la dependència mitjançant el cablejat automàtic.