Spring Autowiring by Constructor
Questa modalità è molto simile a byType , ma si applica agli argomenti del costruttore. Il contenitore Spring esamina i bean su cui è impostato l'attributo autowire costruttore nel file di configurazione XML. Quindi cerca di abbinare e collegare l'argomento del suo costruttore con esattamente uno dei nomi dei bean nel file di configurazione. Se vengono trovate corrispondenze, inietterà quei fagioli. In caso contrario, i bean non verranno cablati.
Ad esempio, se una definizione di bean è impostata su autowire dal costruttore nel file di configurazione e ha un costruttore con uno degli argomenti di tipo SpellChecker , Spring cerca una definizione di bean denominata SpellChecker e la utilizza per impostare l'argomento del costruttore. Puoi ancora collegare gli argomenti rimanenti usando i tag <constructor-arg>. Il seguente esempio illustrerà il concetto.
Cerchiamo di avere un IDE Eclipse funzionante e di eseguire i seguenti passaggi per creare un'applicazione Spring:
Passi | Descrizione |
---|---|
1 | Crea un progetto con un nome SpringExample e crea un pacchetto com.tutorialspoint sottosrc cartella nel progetto creato. |
2 | Aggiungere le librerie Spring richieste utilizzando l' opzione Aggiungi JAR esterni come spiegato nel capitolo Esempio Spring Hello World . |
3 | Crea classi Java TextEditor , SpellChecker e MainApp nel pacchetto com.tutorialspoint . |
4 | Crea il file di configurazione Beans Beans.xml sottosrc cartella. |
5 | Il passaggio finale consiste nel creare il contenuto di tutti i file Java e nel file di configurazione Bean ed eseguire l'applicazione come spiegato di seguito. |
Ecco il contenuto di TextEditor.java file -
package com.tutorialspoint;
public class TextEditor {
private SpellChecker spellChecker;
private String name;
public TextEditor( SpellChecker spellChecker, String name ) {
this.spellChecker = spellChecker;
this.name = name;
}
public SpellChecker getSpellChecker() {
return spellChecker;
}
public String getName() {
return name;
}
public void spellCheck() {
spellChecker.checkSpelling();
}
}
Di seguito è riportato il contenuto di un altro file di classe dipendente SpellChecker.java -
package com.tutorialspoint;
public class SpellChecker {
public SpellChecker(){
System.out.println("Inside SpellChecker constructor." );
}
public void checkSpelling(){
System.out.println("Inside checkSpelling." );
}
}
Di seguito è riportato il contenuto del file MainApp.java file -
package com.tutorialspoint;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
TextEditor te = (TextEditor) context.getBean("textEditor");
te.spellCheck();
}
}
Di seguito è riportato il file di configurazione Beans.xml in condizioni normali -
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- Definition for textEditor bean -->
<bean id = "textEditor" class = "com.tutorialspoint.TextEditor">
<constructor-arg ref = "spellChecker" />
<constructor-arg value = "Generic Text Editor"/>
</bean>
<!-- Definition for spellChecker bean -->
<bean id = "spellChecker" class = "com.tutorialspoint.SpellChecker"></bean>
</beans>
Ma se intendi utilizzare l'autowiring 'dal costruttore', il tuo file di configurazione XML diventerà il seguente:
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- Definition for textEditor bean -->
<bean id = "textEditor" class = "com.tutorialspoint.TextEditor"
autowire = "constructor">
<constructor-arg value = "Generic Text Editor"/>
</bean>
<!-- Definition for spellChecker bean -->
<bean id = "SpellChecker" class = "com.tutorialspoint.SpellChecker"></bean>
</beans>
Una volta terminata la creazione dei file di configurazione dei bean e dei sorgenti, eseguiamo l'applicazione. Se tutto va bene con la tua applicazione, stamperà il seguente messaggio:
Inside SpellChecker constructor.
Inside checkSpelling.