Annotation Spring @Autowired

le @Autowiredl'annotation fournit un contrôle plus précis sur où et comment l'autowiring doit être effectué. L'annotation @Autowired peut être utilisée pour lancer automatiquement le bean sur la méthode setter, tout comme l'annotation @Required, le constructeur, une propriété ou des méthodes avec des noms arbitraires et / ou plusieurs arguments.

@Autowired sur les méthodes Setter

Vous pouvez utiliser @Autowiredannotation sur les méthodes setter pour se débarrasser de l'élément <property> dans le fichier de configuration XML. Lorsque Spring trouve une annotation @Autowired utilisée avec les méthodes setter, il essaie d'exécuterbyType autowiring sur la méthode.

Exemple

Laissez-nous avoir Eclipse IDE en place et suivez les étapes suivantes pour créer une application Spring -

Étape La description
1 Créez un projet avec un nom SpringExample et créez un package com.tutorialspoint sous lesrc dossier dans le projet créé.
2 Ajoutez les bibliothèques Spring requises à l'aide de l' option Ajouter des JAR externes comme expliqué dans le chapitre Exemple de Spring Hello World .
3 Créez les classes Java TextEditor , SpellChecker et MainApp sous le package com.tutorialspoint .
4 Créez le fichier de configuration Beans Beans.xml sous lesrc dossier.
5 La dernière étape consiste à créer le contenu de tous les fichiers Java et le fichier de configuration Bean et à exécuter l'application comme expliqué ci-dessous.

Voici le contenu de TextEditor.java fichier -

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();
   }
}

Voici le contenu d'un autre fichier de classe dépendant SpellChecker.java:

package com.tutorialspoint;

public class SpellChecker {
   public SpellChecker(){
      System.out.println("Inside SpellChecker constructor." );
   }
   public void checkSpelling(){
      System.out.println("Inside checkSpelling." );
   }
}

Voici le contenu de la MainApp.java fichier -

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();
   }
}

Voici le fichier de configuration 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>

Une fois que vous avez terminé de créer les fichiers de configuration source et bean, laissez-nous exécuter l'application. Si tout va bien avec votre application, cela imprimera le message suivant -

Inside SpellChecker constructor.
Inside checkSpelling.

@Autowired sur les propriétés

Vous pouvez utiliser @Autowiredannotation sur les propriétés pour se débarrasser des méthodes de définition. Lorsque vous passerez des valeurs de propriétés auto-câblées à l'aide de <property> Spring attribuera automatiquement ces propriétés avec les valeurs ou références passées. Ainsi, avec l'utilisation de @Autowired sur les propriétés, votreTextEditor.java le fichier deviendra comme suit -

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();
   }
}

Voici le fichier de configuration 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>

Une fois que vous avez terminé avec les deux changements ci-dessus dans les fichiers de configuration source et bean, laissez-nous exécuter l'application. Si tout va bien avec votre application, cela imprimera le message suivant -

Inside TextEditor constructor.
Inside SpellChecker constructor.
Inside checkSpelling.

@Autowired sur les constructeurs

Vous pouvez également appliquer @Autowired aux constructeurs. Une annotation constructeur @Autowired indique que le constructeur doit être câblé automatiquement lors de la création du bean, même si aucun élément <constructor-arg> n'est utilisé lors de la configuration du bean dans un fichier XML. Vérifions l'exemple suivant.

Voici le contenu de TextEditor.java fichier -

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();
   }
}

Voici le fichier de configuration 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>

Une fois que vous avez terminé avec les deux changements ci-dessus dans les fichiers de configuration source et bean, laissez-nous exécuter l'application. Si tout va bien avec votre application, cela imprimera le message suivant:

Inside SpellChecker constructor.
Inside TextEditor constructor.
Inside checkSpelling.

@Autowired avec l'option (required = false)

Par défaut, l'annotation @Autowired implique que la dépendance est requise similaire à l'annotation @Required, cependant, vous pouvez désactiver le comportement par défaut en utilisant (required=false) option avec @Autowired.

L'exemple suivant fonctionnera même si vous ne transmettez aucune valeur pour la propriété d'âge, mais il demandera quand même une propriété de nom. Vous pouvez essayer cet exemple vous-même car il est similaire à l'exemple d'annotation @Required sauf que seulementStudent.java le fichier a été modifié.

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