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
Nie | Režim | Popis |
---|---|---|
1) | Nie | Je to predvolený režim automatického zapojenia. V predvolenom nastavení to znamená žiadne automatické zapojenie. |
2) | podľa názvu | Rež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ľaTypu | Rež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ér | Režim konštruktora vloží závislosť volaním konštruktora triedy. Volá konštruktor s veľkým počtom parametrov. |
5) | automatická detekcia | Od 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.
- B.java
- A.java
- applicationContext.xml
- Test.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.