logo

Autowiring på våren

Autowiring-funktionen i fjäderramverket gör att du kan injicera objektberoendet implicit. Den använder internt setter- eller konstruktorinjektion.

Autowiring kan inte användas för att injicera primitiva värden och strängvärden. Det fungerar endast med referens.


Fördel med Autowiring

Det kräver mindre kod eftersom vi inte behöver skriva koden för att injicera beroendet explicit.


Nackdelen med Autowiring

Ingen kontroll över programmeraren.

Det kan inte användas för primitiva värden och strängvärden.


Autowiring-lägen

Det finns många autokabellägen:

maven installera
Nej.LägeBeskrivning
1)NejDet är standardläget för automatisk kabelkoppling. Det betyder ingen automatisk wiring som standard.
2)vid namnByName-läget injicerar objektberoendet enligt namnet på bönan. I sådana fall måste egenskapens namn och bönans namn vara samma. Det anropar internt setter-metoden.
3)efter typByType-läget injicerar objektberoendet enligt typ. Så egenskapsnamn och bönnamn kan vara olika. Det anropar internt setter-metoden.
4)konstruktörKonstruktorläget injicerar beroendet genom att anropa klassens konstruktor. Det anropar konstruktören som har ett stort antal parametrar.
5)automatiskt upptäckaDen är utfasad sedan våren 3.

Exempel på Autowiring

Låt oss se den enkla koden för att använda autowiring på våren. Du måste använda autowire-attributet för bönelementet för att tillämpa autowire-lägena.

 

Låt oss se det fullständiga exemplet på autowiring på våren. För att skapa detta exempel har vi skapat 4 filer.

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

Denna klass innehåller endast en konstruktor och metod.

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

Denna klass innehåller referens till B-klass och konstruktor och metod.

 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

Den här klassen hämtar bönan från filen applicationContext.xml och anropar 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(); } } 

Produktion:

 b is created a is created hello a hello b 

1) ByName autowiring-läge

I fallet med byName autowiring-läge måste bön-id och referensnamn vara samma.

Den använder internt setterinjektion.

sträng till json java
 

Men om du ändrar namnet på bönan kommer det inte att injicera beroendet.

Låt oss se koden där vi ändrar namnet på bönan från b till b1.

 

2) ByType autowiring-läge

I fallet med byType autowiring-läge kan bön-id och referensnamn vara olika. Men det måste bara finnas en böna av en typ.

Den använder internt setterinjektion.

 

I det här fallet fungerar det bra eftersom du har skapat en instans av B-typ. Det spelar ingen roll att du har ett annat bönnamn än referensnamn.

Men om du har flera bönor av en typ, kommer det inte att fungera och ger undantag.

Låt oss se koden där det finns många bönor av typ B.

 

I sådana fall kommer det att skapa undantag.


3) konstruktörs autokabelläge

I fallet med konstruktörs autokabelläge, injicerar fjäderbehållaren beroendet av den högsta parametriserade konstruktören.

Om du har 3 konstruktörer i en klass, noll-arg, en-arg och två-arg, kommer injektionen att utföras genom att anropa två-arg-konstruktorn.

 

4) inget autokabelläge

I händelse av inget autowiring-läge, injicerar fjäderbehållaren inte beroendet genom autowiring.