logo

Cablare automată în primăvară

Caracteristica de cablare automată a cadrului cu arc vă permite să injectați implicit dependența de obiect. Utilizează intern injecția setter sau constructor.

Cablarea automată nu poate fi utilizată pentru a injecta valori primitive și șiruri. Funcționează doar cu referință.


Avantajul cablajului automat

Este nevoie de mai putin cod deoarece nu trebuie să scriem codul pentru a injecta dependența în mod explicit.


Dezavantajul cablajului automat

Fără control asupra programatorului.

Nu poate fi folosit pentru valorile primitive și șir.


Moduri de cablare automată

Există multe moduri de cablare automată:

număr palindrom
Nu.ModulDescriere
1)NuEste modul implicit de cablare automată. Înseamnă că nu există cablare automată în mod implicit.
2)dupa numeModul byName injectează dependența de obiect în funcție de numele bean-ului. În acest caz, numele proprietății și numele fasolei trebuie să fie aceleași. Apelează intern metoda setter.
3)de tipModul byType injectează dependența de obiect în funcție de tip. Deci, numele proprietății și numele fasolei pot fi diferite. Apelează intern metoda setter.
4)constructorModul constructor injectează dependența apelând constructorul clasei. Apelează constructorul având un număr mare de parametri.
5)auto detectareEste depreciat din Spring 3.

Exemplu de cablare automată

Să vedem codul simplu pentru a utiliza cablarea automată în primăvară. Trebuie să utilizați atributul autowire al elementului bean pentru a aplica modurile de autowire.

 

Să vedem exemplul complet de cablare automată în primăvară. Pentru a crea acest exemplu, am creat 4 fișiere.

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

Această clasă conține doar un constructor și o metodă.

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

Această clasă conține referințele clasei B și constructorul și metoda.

 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

Această clasă primește bean-ul din fișierul applicationContext.xml și apelează metoda de afișare.

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

Ieșire:

 b is created a is created hello a hello b 

1) byName modul de cablare automată

În cazul modului de cablare automată byName, id-ul bean-ului și numele de referință trebuie să fie aceleași.

Utilizează intern injecția setter.

 

Dar, dacă schimbați numele de fasole, nu va injecta dependența.

Să vedem codul în care schimbăm numele bobului din b în b1.

 

2) byType modul de cablare automată

În cazul modului de cablare automată byType, id-ul beanului și numele de referință pot fi diferite. Dar trebuie să existe un singur tip de fasole.

buclă do și while în java

Utilizează intern injecția setter.

 

În acest caz, funcționează bine, deoarece ați creat o instanță de tip B. Nu contează că aveți un nume de fasole diferit de numele de referință.

Dar, dacă aveți mai multe bean de un singur tip, nu va funcționa și va arunca excepție.

Să vedem codul unde sunt multe fasole de tip B.

 

În acest caz, va arunca o excepție.


3) modul de cablare automată a constructorului

În cazul modului de cablare automată a constructorului, containerul cu arc injectează dependența de către constructorul parametrizat cel mai înalt.

Dacă aveți 3 constructori într-o clasă, zero-arg, one-arg și two-arg, atunci injectarea va fi efectuată prin apelarea constructorului cu două argumente.

 

4) fără mod de cablare automată

În cazul lipsei modului de cablare automată, containerul cu arc nu injectează dependența prin cablare automată.