logo

Autokabling om våren

Autowiring-funksjonen til fjærrammeverket lar deg injisere objektavhengigheten implisitt. Den bruker internt setter- eller konstruktørinjeksjon.

Autowiring kan ikke brukes til å injisere primitive verdier og strengverdier. Det fungerer kun med referanse.


Fordel med Autowiring

Det krever mindre kode fordi vi ikke trenger å skrive koden for å injisere avhengigheten eksplisitt.


Ulempen med Autowiring

Ingen kontroll over programmereren.

Den kan ikke brukes for primitive verdier og strengverdier.


Automatisk ledningsmodus

Det er mange autokablingsmoduser:

svevende css
Nei.ModusBeskrivelse
1)NeiDet er standard autokablingsmodus. Det betyr ingen automatisk ledning som standard.
2)ved navnByName-modusen injiserer objektavhengigheten i henhold til navnet på bønnen. I slike tilfeller må eiendomsnavnet og bønnenavnet være det samme. Den kaller internt setter-metoden.
3)etter typeByType-modusen injiserer objektavhengigheten i henhold til type. Så eiendomsnavn og bønnenavn kan være forskjellige. Det kaller internt setter-metoden.
4)konstruktørKonstruktørmodusen injiserer avhengigheten ved å kalle konstruktøren til klassen. Det kaller konstruktøren som har et stort antall parametere.
5)automatisk gjenkjenningDen er avviklet siden vår 3.

Eksempel på Autowiring

La oss se den enkle koden for å bruke autowiring om våren. Du må bruke autowire-attributtet til bønneelementet for å bruke autowire-modusene.

 

La oss se hele eksemplet på autowiring om våren. For å lage dette eksemplet har vi laget 4 filer.

  1. B.java
  2. A.java
  3. applicationContext.xml
  4. Test.java
B.java

Denne klassen inneholder kun en konstruktør og metode.

 package org.sssit; public class B { B(){System.out.println('b is created');} void print(){System.out.println('hello b');} } 
A.java

Denne klassen inneholder referanse til B-klasse og konstruktør og 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

Denne klassen henter bønnen fra applicationContext.xml-filen og kaller opp visningsmetoden.

 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(); } } 

Produksjon:

 b is created a is created hello a hello b 

1) etternavn autokabelmodus

I tilfelle av byName autowiring-modus, må bønne-ID og referansenavn være det samme.

Den bruker innvendig setterinjeksjon.

listenode
 

Men hvis du endrer navnet på bønnen, vil den ikke injisere avhengigheten.

La oss se koden der vi endrer navnet på bønnen fra b til b1.

 

2) ByType autokablingsmodus

I tilfelle av byType autowiring-modus, kan bønne-ID og referansenavn være forskjellige. Men det må bare være én bønne av en type.

Den bruker innvendig setterinjeksjon.

 

I dette tilfellet fungerer det bra fordi du har opprettet en forekomst av B-type. Det spiller ingen rolle at du har et annet bønnenavn enn referansenavn.

Men hvis du har flere bønner av en type, vil det ikke fungere og gi unntak.

La oss se koden hvor det er mange bønner av type B.

 

I slike tilfeller vil det gi unntak.


3) konstruktørens autokablingsmodus

I tilfelle av konstruktørens autokablingsmodus, injiserer fjærbeholderen avhengigheten av den høyeste parameteriserte konstruktøren.

Hvis du har 3 konstruktører i en klasse, null-arg, en-arg og to-arg, vil injeksjon utføres ved å kalle to-arg-konstruktøren.

 

4) ingen autokablingsmodus

I tilfelle ingen autokablingsmodus, injiserer ikke fjærbeholderen avhengigheten ved autokabling.