logo

Cablaggio automatico in primavera

La funzionalità di cablaggio automatico del framework Spring consente di iniettare implicitamente la dipendenza dell'oggetto. Utilizza internamente l'iniezione setter o costruttore.

L'autowiring non può essere utilizzato per iniettare valori primitivi e stringhe. Funziona solo con riferimento.


Vantaggio del cablaggio automatico

Richiede il meno codice perché non è necessario scrivere il codice per iniettare esplicitamente la dipendenza.


Svantaggio del cablaggio automatico

Nessun controllo del programmatore.

Non può essere utilizzato per valori primitivi e stringhe.


Modalità di cablaggio automatico

Esistono molte modalità di cablaggio automatico:

pitone di inserimento
NO.ModalitàDescrizione
1)NOÈ la modalità di cablaggio automatico predefinita. Significa nessun cablaggio automatico per impostazione predefinita.
2)per nomeLa modalità byName inserisce la dipendenza dell'oggetto in base al nome del bean. In tal caso, il nome della proprietà e il nome del bean devono essere gli stessi. Chiama internamente il metodo setter.
3)perTipoLa modalità byType inserisce la dipendenza dell'oggetto in base al tipo. Pertanto il nome della proprietà e il nome del bean possono essere diversi. Chiama internamente il metodo setter.
4)costruttoreLa modalità costruttore inserisce la dipendenza chiamando il costruttore della classe. Chiama il costruttore con un numero elevato di parametri.
5)trovato automaticamenteÈ deprecato dalla primavera 3.

Esempio di cablaggio automatico

Vediamo il semplice codice per utilizzare l'autowiring in primavera. È necessario utilizzare l'attributo autowire dell'elemento bean per applicare le modalità autowire.

 

Vediamo l'esempio completo di autowiring in primavera. Per creare questo esempio, abbiamo creato 4 file.

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

Questa classe contiene solo un costruttore e un metodo.

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

Questa classe contiene riferimenti alla classe B, al costruttore e al metodo.

 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
 
Prova.java

Questa classe ottiene il bean dal file applicationContext.xml e chiama il metodo di visualizzazione.

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

Produzione:

 b is created a is created hello a hello b 

1) Modalità di cablaggio automatico byName

In caso di modalità di cablaggio automatico byName, l'ID bean e il nome di riferimento devono essere gli stessi.

Utilizza internamente l'iniezione setter.

 

Ma se cambi il nome del bean, non inietterà la dipendenza.

Vediamo il codice dove stiamo cambiando il nome del bean da b a b1.

 

2) Modalità di cablaggio automatico per tipo

In caso di modalità di cablaggio automatico byType, l'ID bean e il nome di riferimento potrebbero essere diversi. Ma deve esserci un solo fagiolo per tipo.

Utilizza internamente l'iniezione setter.

 

In questo caso funziona bene perché hai creato un'istanza di tipo B. Non importa che il tuo nome bean sia diverso dal nome di riferimento.

Ma, se hai più bean di un tipo, non funzionerà e genererà un'eccezione.

lungo da infilare

Vediamo il codice dove sono presenti tanti bean di tipo B.

 

In tal caso, genererà un'eccezione.


3) modalità autowiring del costruttore

In caso di modalità di cablaggio automatico del costruttore, il contenitore a molla inserisce la dipendenza dal costruttore con i parametri più alti.

Se in una classe sono presenti 3 costruttori, zero-arg, one-arg e two-arg, l'iniezione verrà eseguita chiamando il costruttore two-arg.

 

4) nessuna modalità di cablaggio automatico

In caso di assenza della modalità di cablaggio automatico, il contenitore a molla non inserisce la dipendenza tramite cablaggio automatico.