los @Autowired La anotación proporciona un control más detallado sobre dónde y cómo se debe realizar el cableado automático. La anotación @Autowired se puede usar para autowire bean en el método setter al igual que la anotación @Required, el constructor, una propiedad o métodos con nombres arbitrarios y / o múltiples argumentos.
@Autowired en métodos de Setter
Puedes usar @Autowired anotación en los métodos de establecimiento para deshacerse del elemento
Ejemplo
Tengamos el IDE de Eclipse en funcionamiento y sigamos los siguientes pasos para crear una aplicación Spring:
Paso | Descripción |
---|---|
1 | Crea un proyecto con un nombre SpringEjemplo y crea un paquete com.tutorialspoint bajo la src carpeta en el proyecto creado. |
2 | Agregue las bibliotecas Spring requeridas usando Agregar archivos JAR externos opción como se explica en la Ejemplo de Spring Hello World capítulo. |
3 | Crea clases de Java Editor de texto, Corrector ortográfico y MainApp bajo la com.tutorialspoint paquete. |
4 | Crear archivo de configuración de Beans Beans.xml bajo la src 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; import org.springframework.beans.factory.annotation.Autowired; public class TextEditor { private SpellChecker spellChecker; @Autowired public void setSpellChecker( SpellChecker spellChecker ){ this.spellChecker = spellChecker; } public SpellChecker getSpellChecker( ) { return spellChecker; } 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 –
<?xml version = "1.0" encoding = "UTF-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:context = "http://www.springframework.org/schema/context" xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config/> <!-- Definition for textEditor bean without constructor-arg --> <bean id = "textEditor" class = "com.tutorialspoint.TextEditor"> </bean> <!-- Definition for spellChecker bean --> <bean id = "spellChecker" class = "com.tutorialspoint.SpellChecker"> </bean> </beans>
Una vez que haya terminado con la creación de archivos de configuración de fuente y bean, permítanos ejecutar la aplicación. Si todo está bien con su aplicación, esto imprimirá el siguiente mensaje:
Inside SpellChecker constructor. Inside checkSpelling.
@Autowired en propiedades
Puedes usar @Autowired anotación en las propiedades para deshacerse de los métodos de establecimiento. Cuando pase valores de propiedades cableadas automáticamente usando
package com.tutorialspoint; import org.springframework.beans.factory.annotation.Autowired; public class TextEditor { @Autowired private SpellChecker spellChecker; public TextEditor() { System.out.println("Inside TextEditor constructor." ); } public SpellChecker getSpellChecker( ){ return spellChecker; } public void spellCheck(){ spellChecker.checkSpelling(); } }
A continuación se muestra el archivo de configuración Beans.xml –
<?xml version = "1.0" encoding = "UTF-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:context = "http://www.springframework.org/schema/context" xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config/> <!-- Definition for textEditor bean --> <bean id = "textEditor" class = "com.tutorialspoint.TextEditor"> </bean> <!-- Definition for spellChecker bean --> <bean id = "spellChecker" class = "com.tutorialspoint.SpellChecker"> </bean> </beans>
Una vez que haya terminado con los dos cambios anteriores en los archivos de configuración de fuente y bean, permítanos ejecutar la aplicación. Si todo está bien con su aplicación, esto imprimirá el siguiente mensaje:
Inside TextEditor constructor. Inside SpellChecker constructor. Inside checkSpelling.
@Autowired en constructores
También puede aplicar @Autowired a los constructores. Una anotación @Autowired del constructor indica que el constructor debe estar conectado automáticamente al crear el bean, incluso si no se utilizan elementos
Aquí está el contenido de TextEditor.java archivo –
package com.tutorialspoint; import org.springframework.beans.factory.annotation.Autowired; public class TextEditor { private SpellChecker spellChecker; @Autowired public TextEditor(SpellChecker spellChecker){ System.out.println("Inside TextEditor constructor." ); this.spellChecker = spellChecker; } public void spellCheck(){ spellChecker.checkSpelling(); } }
A continuación se muestra el archivo de configuración Beans.xml –
<?xml version = "1.0" encoding = "UTF-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:context = "http://www.springframework.org/schema/context" xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config/> <!-- Definition for textEditor bean without constructor-arg --> <bean id = "textEditor" class = "com.tutorialspoint.TextEditor"> </bean> <!-- Definition for spellChecker bean --> <bean id = "spellChecker" class = "com.tutorialspoint.SpellChecker"> </bean> </beans>
Una vez que haya terminado con los dos cambios anteriores en los archivos de configuración de fuente y bean, permítanos ejecutar la aplicación. Si todo está bien con su aplicación, esto imprimirá el siguiente mensaje:
Inside SpellChecker constructor. Inside TextEditor constructor. Inside checkSpelling.
@Autowired con la opción (required = false)
De forma predeterminada, la anotación @Autowired implica que la dependencia se requiere de forma similar a la anotación @Required, sin embargo, puede desactivar el comportamiento predeterminado utilizando (requerido = falso) opción con @Autowired.
El siguiente ejemplo funcionará incluso si no pasa ningún valor para la propiedad de edad, pero aún así exigirá la propiedad de nombre. Puede probar este ejemplo usted mismo porque es similar al ejemplo de anotación @Required, excepto que solo Student.java el archivo ha sido cambiado.
package com.tutorialspoint; import org.springframework.beans.factory.annotation.Autowired; public class Student { private Integer age; private String name; @Autowired(required=false) public void setAge(Integer age) { this.age = age; } public Integer getAge() { return age; } @Autowired public void setName(String name) { this.name = name; } public String getName() { return name; } }
spring_annotation_based_configuration.htm