Funkcija samodejnega ožičenja spomladanskega ogrodja vam omogoča, da implicitno vstavite odvisnost objekta. Interno uporablja nastavitveno ali konstruktorsko injekcijo.
Samodejnega ožičenja ni mogoče uporabiti za vstavljanje osnovnih in nizovnih vrednosti. Deluje samo z referenco.
Prednost samodejnega ožičenja
To zahteva manj kode ker nam ni treba napisati kode za eksplicitno vbrizgavanje odvisnosti.
Pomanjkljivost samodejnega ožičenja
Brez nadzora programerja.
Ni ga mogoče uporabiti za osnovne in nizovne vrednosti.
Načini samodejnega ožičenja
Obstaja veliko načinov samodejnega ožičenja:
c++ pretvori int v niz
št. | Način | Opis |
---|---|---|
1) | št | To je privzeti način samodejnega ožičenja. To pomeni, da privzeto ni samodejnega ožičenja. |
2) | byName | Način byName vstavi odvisnost objekta glede na ime gradnika. V tem primeru morata biti ime lastnosti in ime gradnika enaka. Interno kliče metodo nastavitve. |
3) | po vrsti | Način byType vstavi odvisnost objekta glede na vrsto. Tako sta lahko ime lastnosti in ime gradnika različna. Interno kliče metodo nastavitve. |
4) | konstruktor | Način konstruktorja vnese odvisnost s klicem konstruktorja razreda. Pokliče konstruktor, ki ima veliko število parametrov. |
5) | samodejno zaznavanje | Od 3. pomladi je zastarel. |
Primer samodejnega ožičenja
Oglejmo si preprosto kodo za uporabo samodejnega ožičenja spomladi. Za uporabo načinov samodejnega ožičenja morate uporabiti atribut elementa bean.
Oglejmo si celoten primer samodejnega ožičenja spomladi. Za ustvarjanje tega primera smo ustvarili 4 datoteke.
- B.java
- A.java
- applicationContext.xml
- Test.java
Ta razred vsebuje samo konstruktor in metodo.
package org.sssit; public class B { B(){System.out.println('b is created');} void print(){System.out.println('hello b');} }A.java
Ta razred vsebuje referenco razreda B ter konstruktor in metodo.
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
Ta razred dobi gradnik iz datoteke applicationContext.xml in pokliče metodo prikaza.
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(); } }
Izhod:
b is created a is created hello a hello b
1) način samodejnega ožičenja po imenu
V primeru načina samodejnega ožičenja byName morata biti ID gradnika in referenčno ime enaka.
Interno uporablja vbrizgavanje nastavitve.
primeri dfa
Toda če spremenite ime gradnika, ne bo vnesel odvisnosti.
Poglejmo kodo, kjer spreminjamo ime fižola iz b v b1.
2) način samodejnega ožičenja byType
V primeru načina samodejnega ožičenja byType sta lahko ID gradnika in referenčno ime različna. Vendar mora obstajati samo en fižol vrste.
Interno uporablja vbrizgavanje nastavitve.
V tem primeru deluje dobro, ker ste ustvarili primerek tipa B. Ni pomembno, da imate drugačno ime fižola od referenčnega imena.
Če pa imate več bean-ov ene vrste, ne bo deloval in bo vrgel izjemo.
Oglejmo si kodo, kjer je veliko gražkov tipa B.
V takem primeru bo vrgla izjemo.
3) način samodejnega ožičenja konstruktorja
V primeru načina samodejnega ožičenja konstruktorja pomladni vsebnik vnese odvisnost z najvišjim parametriranim konstruktorjem.
Če imate v razredu 3 konstruktorje, zero-arg, one-arg in two-arg, bo vbrizgavanje izvedeno s klicem konstruktorja z dvema argumentoma.
4) brez načina samodejnega ožičenja
V primeru brez načina samodejnega ožičenja vzmetni vsebnik ne vnese odvisnosti s samodejnim ožičenjem.