logo

Autowiring na jaře

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žimPopis
1)NeJe to výchozí režim automatického zapojení. To znamená, že ve výchozím nastavení není automatické připojení.
2)podle jménaRež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)podleTypuRež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érRežim konstruktoru vloží závislost voláním konstruktoru třídy. Volá konstruktor s velkým počtem parametrů.
5)auto detekceOd 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.

  1. B.java
  2. A.java
  3. applicationContext.xml
  4. Test.java
B.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.