logo

Autowiring i foråret

Autowiring-funktionen i fjederramme giver dig mulighed for implicit at injicere objektafhængigheden. Den bruger internt setter- eller konstruktørinjektion.

Autowiring kan ikke bruges til at injicere primitive værdier og strengværdier. Det virker kun med reference.


Fordel ved Autowiring

Det kræver mindre kode fordi vi ikke behøver at skrive koden for at injicere afhængigheden eksplicit.


Ulempen ved Autowiring

Ingen kontrol af programmør.

Det kan ikke bruges til primitive værdier og strengværdier.


Autowiring-tilstande

Der er mange autowiring-tilstande:

dynamisk programmering
Ingen.ModeBeskrivelse
1)IngenDet er standardtilstanden for automatisk wiring. Det betyder ingen automatisk wiring som standard.
2)ved navnByName-tilstanden injicerer objektafhængigheden i henhold til navnet på bønnen. I sådanne tilfælde skal ejendomsnavnet og bønnenavnet være det samme. Det kalder internt setter-metoden.
3)efter typeByType-tilstanden injicerer objektafhængigheden efter type. Så ejendomsnavn og bønnenavn kan være forskellige. Det kalder internt setter-metoden.
4)konstruktørKonstruktørtilstanden injicerer afhængigheden ved at kalde klassens konstruktør. Det kalder konstruktøren med et stort antal parametre.
5)finde pr. automatikDen er udfaset siden 3. forår.

Eksempel på Autowiring

Lad os se den enkle kode til at bruge autowiring om foråret. Du skal bruge autowire-attributten for bønneelementet for at anvende autowire-tilstandene.

 

Lad os se det fulde eksempel på autowiring om foråret. For at lave dette eksempel har vi lavet 4 filer.

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

Denne klasse indeholder 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 klasse indeholder reference 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 klasse henter bønnen fra filen applicationContext.xml og kalder 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-tilstand

I tilfælde af byName autowiring-tilstand skal bean-id og referencenavn være det samme.

Den bruger internt setter-injektion.

listenode
 

Men hvis du ændrer navnet på bønnen, vil det ikke injicere afhængigheden.

Lad os se koden, hvor vi ændrer navnet på bønnen fra b til b1.

 

2) ByType autowiring-tilstand

I tilfælde af byType autowiring-tilstand kan bean-id og referencenavn være anderledes. Men der må kun være én bønne af en type.

Den bruger internt setter-injektion.

 

I dette tilfælde fungerer det fint, fordi du har oprettet en instans af B-type. Det gør ikke noget, at du har et andet bønnenavn end referencenavnet.

Men hvis du har flere bønner af en type, vil det ikke fungere og give undtagelser.

Lad os se koden, hvor der er mange bønner af type B.

 

I sådanne tilfælde vil det give undtagelse.


3) constructor autowiring mode

I tilfælde af autowiring-tilstand for konstruktør, indsprøjter fjederbeholderen afhængigheden af ​​den højest parametriserede konstruktør.

Hvis du har 3 konstruktører i en klasse, zero-arg, one-arg og two-arg, vil injektionen blive udført ved at kalde to-arg konstruktøren.

 

4) ingen autowiring-tilstand

I tilfælde af ingen autowiring-tilstand injicerer fjederbeholderen ikke afhængigheden ved autowiring.