Značajka automatskog povezivanja proljetnog okvira omogućuje vam da implicitno umetnete ovisnost objekta. Interno koristi ubrizgavanje postavljača ili konstruktora.
Autowiring se ne može koristiti za umetanje primitivnih i znakovnih vrijednosti. Radi samo s referencom.
Prednost automatskog ožičenja
To zahtijeva manje koda jer ne trebamo pisati kod za eksplicitno umetanje ovisnosti.
Nedostatak automatskog ožičenja
Nema kontrole programera.
Ne može se koristiti za primitivne i znakovne vrijednosti.
Načini automatskog ožičenja
Postoji mnogo načina automatskog ožičenja:
foreach java
Ne. | Način rada | Opis |
---|---|---|
1) | Ne | To je zadani način automatskog ožičenja. To znači da nema automatskog ožičenja prema zadanim postavkama. |
2) | imenom | Način byName ubacuje ovisnost objekta prema imenu beana. U tom slučaju ime svojstva i ime graha moraju biti isti. Interno poziva metodu postavljača. |
3) | prema vrsti | Način byType uvodi ovisnost objekta prema tipu. Dakle, naziv svojstva i naziv beana mogu biti različiti. Interno poziva metodu postavljača. |
4) | konstruktor | Način rada konstruktora ubacuje ovisnost pozivanjem konstruktora klase. Poziva konstruktor koji ima veliki broj parametara. |
5) | automatsko otkrivanje | Zastario je od 3. proljeća. |
Primjer automatskog ožičenja
Pogledajmo jednostavan kod za korištenje autowiringa u proljeće. Morate koristiti autowire atribut bean elementa da biste primijenili autowire modove.
Pogledajmo cijeli primjer automatskog ožičenja u proljeće. Za izradu ovog primjera izradili smo 4 datoteke.
- B.java
- A.java
- ApplicationContext.xml
- Test.java
Ova klasa sadrži samo konstruktor i metodu.
package org.sssit; public class B { B(){System.out.println('b is created');} void print(){System.out.println('hello b');} }A.java
Ova klasa sadrži referencu B klase i konstruktora i metode.
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
Ova klasa dobiva bean iz datoteke applicationContext.xml i poziva metodu 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(); } }
Izlaz:
b is created a is created hello a hello b
1) način automatskog ožičenja po imenu
U slučaju byName načina autowiringa, bean ID i referentni naziv moraju biti isti.
Interno koristi ubrizgavanje setera.
Ali, ako promijenite ime beana, to neće umetnuti ovisnost.
Pogledajmo kod u kojem mijenjamo ime beana iz b u b1.
2) način automatskog ožičenja po vrsti
U slučaju byType načina autowiring, bean ID i referentni naziv mogu biti različiti. Ali mora postojati samo jedna vrsta graha.
Interno koristi ubrizgavanje setera.
U ovom slučaju radi dobro jer ste stvorili instancu tipa B. Nije važno što imate različito ime beana od referentnog naziva.
Ali, ako imate više zrnaca jedne vrste, neće raditi i izbacit će iznimku.
Pogledajmo kod u kojem se nalazi mnogo zrnaca tipa B.
U tom će slučaju izbaciti iznimku.
3) način autowiring konstruktora
U slučaju načina automatskog povezivanja konstruktora, proljetni spremnik ubacuje ovisnost prema najvišem parametriziranom konstruktoru.
for petlja u c
Ako imate 3 konstruktora u klasi, zero-arg, one-arg i two-arg, tada će se ubrizgavanje izvršiti pozivanjem konstruktora s dva arga.
4) bez automatskog ožičenja
U slučaju da nema načina automatskog ožičenja, opružni spremnik ne ubacuje ovisnost automatskim ožičenjem.