Annotations du printemps JSR-250

Spring prend également en charge les annotations basées sur JSR-250 qui incluent les annotations @PostConstruct, @PreDestroy et @Resource. Bien que ces annotations ne soient pas vraiment nécessaires car vous avez déjà d'autres remplaçants, laissez-nous en avoir une brève idée.

Annotations @PostConstruct et @PreDestroy

Pour définir la configuration et le démontage d'un bean, nous déclarons simplement le <bean> avec init-method et / ou destroy-methodparamètres. L'attribut init-method spécifie une méthode qui doit être appelée sur le bean immédiatement lors de l'instanciation. De même, la méthode destroy spécifie une méthode qui est appelée juste avant qu'un bean ne soit supprimé du conteneur.

Vous pouvez utiliser @PostConstruct annotation comme alternative au rappel d'initialisation et @PreDestroy annotation comme alternative au rappel de destruction comme expliqué dans l'exemple ci-dessous.

Exemple

Laissez-nous mettre en place un IDE Eclipse fonctionnel 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 HelloWorld 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 HelloWorld.java fichier -

package com.tutorialspoint;
import javax.annotation.*;

public class HelloWorld {
   private String message;

   public void setMessage(String message){
      this.message  = message;
   }
   public String getMessage(){
      System.out.println("Your Message : " + message);
      return message;
   }
   
   @PostConstruct
   public void init(){
      System.out.println("Bean is going through init.");
   }
   
   @PreDestroy
   public void destroy(){
      System.out.println("Bean will destroy now.");
   }
}

Voici le contenu de la MainApp.javafichier. Ici, vous devez enregistrer un hook d'arrêtregisterShutdownHook()méthode qui est déclarée sur la classe AbstractApplicationContext. Cela garantira un arrêt progressif et appellera les méthodes de destruction appropriées.

package com.tutorialspoint;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
   public static void main(String[] args) {
      AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");

      HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
      obj.getMessage();
      context.registerShutdownHook();
   }
}

Voici le fichier de configuration Beans.xml requis pour les méthodes init et destroy -

<?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-3.0.xsd
   http://www.springframework.org/schema/context
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

   <context:annotation-config/>
   <bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld"
      init-method = "init" destroy-method = "destroy">
      <property name = "message" value = "Hello World!"/>
   </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, elle imprimera le message suivant -

Bean is going through init.
Your Message : Hello World!
Bean will destroy now.

Annotation @Resource

Vous pouvez utiliser @Resourcel'annotation sur les champs ou les méthodes de définition et cela fonctionne de la même manière que dans Java EE 5. L'annotation @Resource prend un attribut 'name' qui sera interprété comme le nom du bean à injecter. Tu peux dire, ça suitby-name sémantique de câblage automatique comme illustré dans l'exemple suivant -

package com.tutorialspoint;

import javax.annotation.Resource;

public class TextEditor {
   private SpellChecker spellChecker;

   @Resource(name = "spellChecker")
   public void setSpellChecker( SpellChecker spellChecker ){
      this.spellChecker = spellChecker;
   }
   public SpellChecker getSpellChecker(){
      return spellChecker;
   }
   public void spellCheck(){
      spellChecker.checkSpelling();
   }
}

Si aucun 'nom' n'est spécifié explicitement, le nom par défaut est dérivé du nom de champ ou de la méthode de définition. Dans le cas d'un champ, il prend le nom du champ; dans le cas d'une méthode setter, elle prend le nom de la propriété du bean.