Funkce automatického zapojení pružinového rámce vám umožňuje implicitně vložit závislost na objektu. Interně používá setter nebo konstruktorové vstřikování.
Autowiring nelze použít k vložení primitivních a řetězcových hodnot. Funguje pouze s odkazem.
Výhoda Autowiringu
Vyžaduje to méně kódu protože nepotřebujeme psát kód, abychom explicitně vložili závislost.
Nevýhoda Autowiringu
Žádná kontrola programátora.
Nelze jej použít pro primitivní a řetězcové hodnoty.
Režimy automatického zapojení
Existuje mnoho režimů automatického zapojení:
np.histogram
Ne. | Režim | Popis |
---|---|---|
1) | Ne | Je to výchozí režim automatického zapojení. To znamená, že ve výchozím nastavení není automatické připojení. |
2) | podle jména | Režim byName injektuje závislost objektu podle názvu beanu. V takovém případě musí být název vlastnosti a název beanu stejný. Interně volá metodu setter. |
3) | podleTypu | Režim byType vkládá závislost objektu podle typu. Název vlastnosti a název fazole se tedy mohou lišit. Interně volá metodu setter. |
4) | konstruktér | Režim konstruktoru vloží závislost voláním konstruktoru třídy. Volá konstruktor s velkým počtem parametrů. |
5) | auto detekce | Od jara 3 je zastaralá. |
Příklad Autowiringu
Podívejme se na jednoduchý kód pro použití autowiringu na jaře. Chcete-li použít režimy autowire, musíte použít atribut autowire prvku bean.
Podívejme se na úplný příklad automatického zapojení na jaře. Pro vytvoření tohoto příkladu jsme vytvořili 4 soubory.
- B.java
- A.java
- applicationContext.xml
- Test.java
Tato třída obsahuje pouze konstruktor a metodu.
package org.sssit; public class B { B(){System.out.println('b is created');} void print(){System.out.println('hello b');} }A.java
Tato třída obsahuje odkaz na třídu B a konstruktor a metodu.
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
Tato třída získá bean ze souboru applicationContext.xml a zavolá metodu display.
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ýstup:
b is created a is created hello a hello b
1) režim automatického zapojení podle názvu
V případě režimu automatického zapojení byName musí být id bean a název reference stejné.
Interně používá vstřikování setteru.
Ale pokud změníte název bean, nevloží závislost.
Podívejme se na kód, kde měníme název fazole z b na b1.
2) podle typu režimu automatického zapojení
V případě režimu automatického zapojení byType se může ID bean a referenční název lišit. Ale musí existovat pouze jedna fazole druhu.
konkretizace v Javě
Interně používá vstřikování setteru.
V tomto případě to funguje dobře, protože jste vytvořili instanci typu B. Nezáleží na tom, že máte jiný název fazole než referenční název.
Ale pokud máte více beanů jednoho typu, nebude to fungovat a vyvolá výjimku.
Podívejme se na kód, kde je mnoho fazolí typu B.
V takovém případě vyvolá výjimku.
3) režim automatického zapojení konstruktoru
V případě režimu autowiring konstruktoru vloží pružinový kontejner závislost podle konstruktoru s nejvyššími parametry.
Pokud máte ve třídě 3 konstruktory, zero-arg, one-arg a two-arg, pak se vložení provede voláním konstruktoru two-arg.
4) žádný režim automatického zapojení
V případě, že není režim automatického zapojení, pružinová nádoba neinjektuje závislost automatickým zapojením.