logo

Avtomatsko ožičenje spomladi

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činOpis
1)štTo je privzeti način samodejnega ožičenja. To pomeni, da privzeto ni samodejnega ožičenja.
2)byNameNač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 vrstiNačin byType vstavi odvisnost objekta glede na vrsto. Tako sta lahko ime lastnosti in ime gradnika različna. Interno kliče metodo nastavitve.
4)konstruktorNačin konstruktorja vnese odvisnost s klicem konstruktorja razreda. Pokliče konstruktor, ki ima veliko število parametrov.
5)samodejno zaznavanjeOd 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.

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