logo

Automatinis laidų sujungimas pavasarį

Spyruoklinio karkaso automatinio laidų sujungimo funkcija leidžia netiesiogiai įterpti objekto priklausomybę. Viduje naudojamas seteris arba konstruktoriaus įpurškimas.

Automatinis laidų prijungimas negali būti naudojamas primityvioms ir eilutės reikšmėms įterpti. Jis veikia tik su nuoroda.


Autowiring privalumas

Tam reikia mažiau kodo nes mums nereikia rašyti kodo, kad aiškiai įterptume priklausomybę.


Autowiring trūkumas

Nėra programuotojo kontrolės.

Jis negali būti naudojamas primityvioms ir styginėms reikšmėms.


Automatinio laidų prijungimo režimai

Yra daug automatinio laidų prijungimo režimų:

Moore mašinos pavyzdžiai
Nr.Režimasapibūdinimas
1)NrTai numatytasis automatinio laidų prijungimo režimas. Tai reiškia, kad pagal numatytuosius nustatymus nėra automatinio laidų prijungimo.
2)pagal vardąByName režimas įveda objekto priklausomybę pagal pupelės pavadinimą. Tokiu atveju nuosavybės pavadinimas ir pupelės pavadinimas turi sutapti. Jis viduje iškviečia nustatymo metodą.
3)pagal tipą„byType“ režimas įveda objekto priklausomybę pagal tipą. Taigi nuosavybės pavadinimas ir pupelės pavadinimas gali skirtis. Jis viduje iškviečia nustatymo metodą.
4)konstruktoriusKonstruktoriaus režimas įveda priklausomybę iškviesdamas klasės konstruktorių. Jis iškviečia konstruktorių, turintį daug parametrų.
5)automatiškai aptiktiJis nebenaudojamas nuo 3 pavasario.

Automatinio laidų sujungimo pavyzdys

Pažiūrėkime paprastą kodą, kaip naudoti automatinį laidų prijungimą pavasarį. Norėdami pritaikyti automatinio ryšio režimus, turite naudoti elemento „autowire“ atributą.

 

Pažiūrėkime visą automatinio laidų prijungimo pavyzdį pavasarį. Norėdami sukurti šį pavyzdį, sukūrėme 4 failus.

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

Šioje klasėje yra tik konstruktorius ir metodas.

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

Šioje klasėje yra nuoroda į B klasę ir konstruktorių bei metodą.

 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

Ši klasė gauna pupelę iš applicationContext.xml failo ir iškviečia rodymo metodą.

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

Išvestis:

 b is created a is created hello a hello b 

1) „byName“ automatinio laidų prijungimo režimas

„byName“ automatinio laidų prijungimo režimo atveju pupelių ID ir nuorodos pavadinimas turi sutapti.

Viduje naudojamas seterio įpurškimas.

 

Bet jei pakeisite pupelės pavadinimą, tai nesukels priklausomybės.

Pažiūrėkime kodą, kuriame keičiame pupelės pavadinimą iš b į b1.

 

2) „byType“ automatinio laidų prijungimo režimas

ByType automatinio laidų prijungimo režimu pupelių ID ir nuorodos pavadinimas gali skirtis. Bet turi būti tik viena rūšies pupelė.

Viduje naudojamas seterio įpurškimas.

 

Šiuo atveju tai veikia gerai, nes sukūrėte B tipo egzempliorių. Nesvarbu, kad pupelių pavadinimas skiriasi nuo referencinio pavadinimo.

Bet jei turite keletą vienos rūšies pupelių, tai neveiks ir išmeskite išimtį.

java generuoja atsitiktinį skaičių

Pažiūrėkime kodą, kuriame yra daug B tipo pupelių.

 

Tokiu atveju tai padarys išimtį.


3) konstruktoriaus automatinio laidų jungimo režimas

Konstruktoriaus automatinio laidų sujungimo režimu spyruoklinis konteineris įveda priklausomybę nuo didžiausių parametrų konstruktoriaus.

Jei klasėje yra 3 konstruktoriai, zero-arg, one-arg ir two-arg, tada įpurškimas bus atliktas paskambinus dviejų arg konstruktorių.

 

4) nėra automatinio laidų režimo

Jei nėra automatinio laidų sujungimo režimo, spyruoklinis konteineris nesukelia priklausomybės automatiniu laidų sujungimu.