logo

Autowiring na jar

Funkcia automatického zapojenia pružinového rámca vám umožňuje implicitne vložiť závislosť na objekte. Interne používa setter alebo konstruktor vstrekovanie.

Autowiring nemožno použiť na vloženie primitívnych a reťazcových hodnôt. Funguje len s referenciou.


Výhoda Autowiringu

Vyžaduje si to menej kódu pretože nepotrebujeme písať kód na explicitné vloženie závislosti.


Nevýhoda Autowiringu

Žiadna kontrola programátora.

Nemožno ho použiť pre primitívne a reťazcové hodnoty.


Režimy automatického zapojenia

Existuje mnoho režimov automatického zapojenia:

trie dátovú štruktúru
NieRežimPopis
1)NieJe to predvolený režim automatického zapojenia. V predvolenom nastavení to znamená žiadne automatické zapojenie.
2)podľa názvuRežim byName vloží závislosť objektu podľa názvu fazule. V takom prípade musia byť názov vlastnosti a názov fazule rovnaké. Interne volá metódu setter.
3)podľaTypuRežim byType aplikuje závislosť objektu podľa typu. Takže názov vlastnosti a názov fazule sa môžu líšiť. Interne volá metódu setter.
4)konštruktérRežim konštruktora vloží závislosť volaním konštruktora triedy. Volá konštruktor s veľkým počtom parametrov.
5)automatická detekciaOd jari 3 je zastaraná.

Príklad Autowiringu

Pozrime sa na jednoduchý kód na používanie automatického zapojenia na jar. Ak chcete použiť režimy autowire, musíte použiť atribút autowire prvku bean.

 

Pozrime sa na úplný príklad automatického zapojenia na jar. Na vytvorenie tohto príkladu sme vytvorili 4 súbory.

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

Táto trieda obsahuje iba konštruktor a metódu.

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

Táto trieda obsahuje odkaz na triedu B a konštruktor a metódu.

 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

Táto trieda získa bean zo súboru applicationContext.xml a zavolá metódu zobrazenia.

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

Výkon:

 b is created a is created hello a hello b 

1) režim automatického zapojenia podľa názvu

V prípade režimu automatického zapojenia byName musia byť id bean a referenčný názov rovnaké.

Vnútorne používa vstrekovanie setteru.

fonty pre gimp
 

Ale ak zmeníte názov fazule, nevloží závislosť.

Pozrime sa na kód, v ktorom meníme názov fazule z b na b1.

 

2) podľa typu režimu automatického zapojenia

V prípade režimu automatického zapojenia typu byType sa môžu ID fazule a referenčný názov líšiť. Ale musí existovať len jeden druh fazule.

Vnútorne používa vstrekovanie setteru.

 

V tomto prípade to funguje dobre, pretože ste vytvorili inštanciu typu B. Nezáleží na tom, že máte iný názov fazule ako referenčný názov.

Ak však máte viacero fazulí jedného typu, nebude to fungovať a vyvolá výnimku.

Pozrime sa na kód, kde je veľa fazule typu B.

 

V takom prípade vyvolá výnimku.


3) režim automatického zapojenia konštruktora

V prípade režimu automatického zapojenia konštruktora pružinový kontajner injektuje závislosť konštruktorom s najvyšším parametrom.

Ak máte v triede 3 konštruktory, zero-arg, one-arg a two-arg, injekcia sa vykoná volaním konštruktora s dvoma argumentmi.

 

4) žiadny režim automatického zapojenia

V prípade, že nie je režim automatického zapojenia, pružinová nádoba neinjektuje závislosť automatickým zapojením.