Saltar al contenido

Spring @Autowired Anotación

octubre 19, 2021

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 en el archivo de configuración XML. Cuando Spring encuentra una anotación @Autowired utilizada con métodos de establecimiento, intenta realizar por tipo 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 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 , Spring asignará automáticamente esas propiedades con los valores o referencias pasados. Entonces, con el uso de @Autowired en propiedades, su TextEditor.java El 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, 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 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, 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

close