Spring @Autowired Anotación

los @AutowiredLa 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 puede usarse 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 @Autowiredanotación en los métodos de establecimiento para deshacerse del elemento <property> en el archivo de configuración XML. Cuando Spring encuentra una anotación @Autowired utilizada con métodos de establecimiento, intenta realizarbyType autowiring en el método.

Ejemplo

Tengamos el IDE de Eclipse en funcionamiento y sigamos los siguientes pasos para crear una aplicación Spring:

Paso 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;

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 @Autowiredanotación en propiedades para deshacerse de los métodos de establecimiento. Cuando pase valores de propiedades cableadas automáticamente usando <property>, Spring asignará automáticamente esas propiedades con los valores o referencias pasados. Entonces, con el uso de @Autowired en propiedades, suTextEditor.java archivo se convertirá en el siguiente:

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, ejecutemos 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 <constructor-arg> al configurar el bean en el archivo XML. Veamos el siguiente ejemplo.

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, ejecutemos 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 (required=false) 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 soloStudent.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;
   }
}