logo

Autowiring im Frühling

Mit der Autowiring-Funktion des Spring Frameworks können Sie die Objektabhängigkeit implizit einfügen. Es verwendet intern Setter- oder Konstruktorinjektion.

Autowiring kann nicht zum Einfügen von Grund- und Zeichenfolgenwerten verwendet werden. Es funktioniert nur mit Referenz.


Vorteil von Autowiring

Es erfordert die weniger Code weil wir den Code nicht schreiben müssen, um die Abhängigkeit explizit einzufügen.


Nachteil von Autowiring

Keine Kontrolle des Programmierers.

Es kann nicht für Grund- und Zeichenfolgenwerte verwendet werden.


Autowiring-Modi

Es gibt viele Autowiring-Modi:

Was ist Mac OS?
NEIN.ModusBeschreibung
1)NEINDies ist der standardmäßige Autowiring-Modus. Dies bedeutet, dass standardmäßig keine automatische Verkabelung erfolgt.
2)namentlichDer byName-Modus fügt die Objektabhängigkeit entsprechend dem Namen der Bean ein. In diesem Fall müssen der Eigenschaftsname und der Bean-Name identisch sein. Es ruft intern die Setter-Methode auf.
3)nach TypDer byType-Modus fügt die Objektabhängigkeit je nach Typ ein. Daher können Eigenschaftsname und Bean-Name unterschiedlich sein. Es ruft intern die Setter-Methode auf.
4)KonstrukteurDer Konstruktormodus fügt die Abhängigkeit ein, indem er den Konstruktor der Klasse aufruft. Es ruft den Konstruktor mit einer großen Anzahl von Parametern auf.
5)automatische ErkennungEs ist seit Spring 3 veraltet.

Beispiel für Autowiring

Sehen wir uns den einfachen Code zur Verwendung von Autowiring im Frühjahr an. Sie müssen das Autowire-Attribut des Bean-Elements verwenden, um die Autowire-Modi anzuwenden.

 

Sehen wir uns das vollständige Beispiel der automatischen Verkabelung im Frühjahr an. Um dieses Beispiel zu erstellen, haben wir 4 Dateien erstellt.

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

Diese Klasse enthält nur einen Konstruktor und eine Methode.

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

Diese Klasse enthält Referenzen der B-Klasse sowie des Konstruktors und der Methode.

 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

Diese Klasse ruft die Bean aus der Datei applicationContext.xml ab und ruft die Anzeigemethode auf.

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

Ausgabe:

 b is created a is created hello a hello b 

1) ByName-Autowiring-Modus

Im Fall des ByName-Autowiring-Modus müssen Bean-ID und Referenzname identisch sein.

Es verwendet intern die Setter-Injektion.

 

Wenn Sie jedoch den Namen der Bean ändern, wird die Abhängigkeit nicht eingefügt.

Sehen wir uns den Code an, in dem wir den Namen der Bean von b in b1 ändern.

 

2) ByType-Autowiring-Modus

Im Autowiring-Modus „byType“ können Bean-ID und Referenzname unterschiedlich sein. Es darf jedoch nur eine Bohne einer Sorte vorhanden sein.

Es verwendet intern die Setter-Injektion.

 

In diesem Fall funktioniert es einwandfrei, da Sie eine Instanz vom Typ B erstellt haben. Es spielt keine Rolle, dass Sie einen anderen Bean-Namen als den Referenznamen haben.

Wenn Sie jedoch mehrere Beans eines Typs haben, funktioniert dies nicht und es wird eine Ausnahme ausgelöst.

Sehen wir uns den Code an, in dem es viele Beans vom Typ B gibt.

 

In einem solchen Fall wird eine Ausnahme ausgelöst.


3) Konstruktor-Autowiring-Modus

Im Falle des Konstruktor-Autowiring-Modus fügt der Federcontainer die Abhängigkeit vom höchsten parametrisierten Konstruktor ein.

Federwerkzeug-Suite

Wenn Sie drei Konstruktoren in einer Klasse haben, null Argumente, ein Argument und zwei Argumente, wird die Injektion durch Aufrufen des Konstruktors mit zwei Argumenten durchgeführt.

 

4) kein Autowiring-Modus

Wenn kein Autowiring-Modus vorhanden ist, fügt der Federcontainer die Abhängigkeit nicht durch Autowiring ein.