Spring Autowiring por constructor
Este modo es muy similar a byType , pero se aplica a los argumentos del constructor. Spring container mira los beans en los que se establece el atributo autowire constructor en el archivo de configuración XML. Luego intenta hacer coincidir y conectar el argumento de su constructor con exactamente uno de los nombres de los beans en el archivo de configuración. Si se encuentran coincidencias, inyectará esos beans. De lo contrario, no se conectarán los beans.
Por ejemplo, si una definición de bean está configurada como autowire por el constructor en el archivo de configuración, y tiene un constructor con uno de los argumentos del tipo SpellChecker , Spring busca una definición de bean llamada SpellChecker y la usa para establecer el argumento del constructor. Aún así, puede cablear los argumentos restantes usando etiquetas <constructor-arg>. El siguiente ejemplo ilustrará el concepto.
Tengamos un IDE de Eclipse en funcionamiento y sigamos los siguientes pasos para crear una aplicación Spring:
Pasos | Descripción |
---|---|
1 | Cree un proyecto con un nombre SpringExample y cree un paquete com.tutorialspoint bajo elsrc carpeta en el proyecto creado. |
2 | Agregue las bibliotecas Spring requeridas usando la opción Agregar JAR externos como se explica en el capítulo Ejemplo de Spring Hello World . |
3 | Crear clases de Java TextEditor , corrector ortográfico y MainApp bajo la com.tutorialspoint paquete. |
4 | Cree el archivo de configuración de Beans Beans.xml bajo elsrc carpeta. |
5 | El paso final es crear el contenido de todos los archivos Java y el archivo de configuración de Bean y ejecutar la aplicación como se explica a continuación. |
Aquí está el contenido de TextEditor.java archivo -
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();
}
}
A continuación se muestra el contenido de otro archivo de clase dependiente SpellChecker.java -
package com.tutorialspoint;
public class SpellChecker {
public SpellChecker(){
System.out.println("Inside SpellChecker constructor." );
}
public void checkSpelling(){
System.out.println("Inside checkSpelling." );
}
}
A continuación se muestra el contenido de la MainApp.java archivo -
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();
}
}
A continuación se muestra el archivo de configuración Beans.xml en condiciones normales -
<?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>
Pero si va a utilizar el cableado automático 'por constructor', entonces su archivo de configuración XML se convertirá en el siguiente:
<?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 vez que haya terminado de crear los archivos de configuración de fuente y bean, ejecutemos la aplicación. Si todo está bien con su aplicación, imprimirá el siguiente mensaje:
Inside SpellChecker constructor.
Inside checkSpelling.