logo

Automatyczne okablowanie na wiosnę

Funkcja automatycznego okablowania frameworka Spring umożliwia niejawne wstrzykiwanie zależności obiektu. Wewnętrznie używa wstrzykiwania settera lub konstruktora.

Nie można używać funkcji automatycznego okablowania do wstrzykiwania wartości pierwotnych i łańcuchowych. Działa tylko w celach referencyjnych.


Zaleta automatycznego okablowania

Wymaga mniej kodu ponieważ nie musimy pisać kodu, aby jawnie wstrzyknąć zależność.


Wady automatycznego okablowania

Brak kontroli programisty.

Nie można go używać do wartości pierwotnych i łańcuchowych.


Tryby automatycznego okablowania

Istnieje wiele trybów automatycznego okablowania:

wykres alokacji zasobów
NIE.TrybOpis
1)NIEJest to domyślny tryb automatycznego okablowania. Oznacza to, że domyślnie nie ma automatycznego okablowania.
2)wg nazwyTryb byName wstrzykuje zależność obiektu zgodnie z nazwą komponentu bean. W takim przypadku nazwa właściwości i nazwa komponentu bean muszą być takie same. Wewnętrznie wywołuje metodę ustawiającą.
3)według rodzajuTryb byType wprowadza zależność obiektu w zależności od typu. Zatem nazwa właściwości i nazwa komponentu bean mogą być różne. Wewnętrznie wywołuje metodę ustawiającą.
4)konstruktorTryb konstruktora wprowadza zależność poprzez wywołanie konstruktora klasy. Wywołuje konstruktor mający dużą liczbę parametrów.
5)automatyczne wykrywanieJest przestarzały od wiosny 3.

Przykład automatycznego okablowania

Zobaczmy prosty kod umożliwiający użycie automatycznego okablowania na wiosnę. Aby zastosować tryby autowire, musisz użyć atrybutu autowire elementu bean.

 

Zobaczmy pełny przykład automatycznego okablowania na wiosnę. Aby utworzyć ten przykład, utworzyliśmy 4 pliki.

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

Ta klasa zawiera tylko konstruktor i metodę.

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

Ta klasa zawiera odwołanie do klasy B oraz konstruktora i metody.

 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(); } } 
aplikacjaContext.xml
 
Test.java

Ta klasa pobiera komponent bean z pliku applicationContext.xml i wywołuje metodę display.

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

Wyjście:

 b is created a is created hello a hello b 

1) tryb automatycznego okablowania według nazwy

W przypadku trybu automatycznego okablowania według nazwy, identyfikator komponentu bean i nazwa referencyjna muszą być takie same.

Wewnętrznie wykorzystuje wtrysk setera.

nfa do dfa
 

Ale jeśli zmienisz nazwę komponentu bean, nie spowoduje to wstrzyknięcia zależności.

Zobaczmy kod, w którym zmieniamy nazwę komponentu bean z b na b1.

 

2) Tryb automatycznego okablowania według typu

W przypadku trybu automatycznego okablowania według typu, identyfikator komponentu bean i nazwa referencyjna mogą się różnić. Ale musi istnieć tylko jedna fasola danego typu.

Wewnętrznie wykorzystuje wtrysk setera.

 

W tym przypadku działa dobrze, ponieważ utworzyłeś instancję typu B. Nie ma znaczenia, że ​​masz inną nazwę komponentu bean niż nazwa referencyjna.

Ale jeśli masz wiele komponentów bean jednego typu, nie zadziała i wyrzuci wyjątek.

Zobaczmy kod, w którym znajduje się wiele ziaren typu B.

 

W takim przypadku zgłosi wyjątek.


3) tryb automatycznego okablowania konstruktora

W przypadku trybu automatycznego okablowania konstruktora, kontener sprężynowy wprowadza zależność od najwyżej sparametryzowanego konstruktora.

Jeśli masz 3 konstruktory w klasie, zero-arg, jeden-arg i dwa-arg, wówczas zastrzyk zostanie wykonany poprzez wywołanie konstruktora z dwoma argumentami.

 

4) brak trybu automatycznego okablowania

W przypadku braku trybu automatycznego okablowania kontener sprężynowy nie wprowadza zależności poprzez automatyczne okablowanie.