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 nome | La 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) | perTipo | La 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) | costruttore | La 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.
- B.java
- A.java
- applicationContext.xml
- Prova.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.