logo

Automatsko ožičenje u proljeće

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 radaOpis
1)NeTo je zadani način automatskog ožičenja. To znači da nema automatskog ožičenja prema zadanim postavkama.
2)imenomNač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 vrstiNačin byType uvodi ovisnost objekta prema tipu. Dakle, naziv svojstva i naziv beana mogu biti različiti. Interno poziva metodu postavljača.
4)konstruktorNačin rada konstruktora ubacuje ovisnost pozivanjem konstruktora klase. Poziva konstruktor koji ima veliki broj parametara.
5)automatsko otkrivanjeZastario 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.

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