Spring - Post-processeurs de haricots

le BeanPostProcessor interface définit des méthodes de rappel que vous pouvez implémenter pour fournir votre propre logique d'instanciation, logique de résolution de dépendance, etc. .

Vous pouvez configurer plusieurs interfaces BeanPostProcessor et vous pouvez contrôler l'ordre dans lequel ces interfaces BeanPostProcessor s'exécutent en définissant le order propriété à condition que BeanPostProcessor implémente le Ordered interface.

Les BeanPostProcessors fonctionnent sur des instances de bean (ou d'objet), ce qui signifie que le conteneur Spring IoC instancie une instance de bean, puis les interfaces BeanPostProcessor font leur travail.

Un ApplicationContext détecte automatiquement tous les beans définis avec l'implémentation du BeanPostProcessor et enregistre ces beans en tant que postprocesseurs, pour être ensuite appelés de manière appropriée par le conteneur lors de la création du bean.

Exemple

Les exemples suivants montrent comment écrire, enregistrer et utiliser BeanPostProcessors dans le contexte d'un ApplicationContext.

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

Pas 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 , InitHelloWorld 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;

public class HelloWorld {
   private String message;

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

Ceci est un exemple très basique d'implémentation de BeanPostProcessor, qui imprime un nom de bean avant et après l'initialisation de n'importe quel bean. Vous pouvez implémenter une logique plus complexe avant et après l'initialisation d'un bean car vous avez accès à l'objet bean dans les deux méthodes du post-processeur.

Voici le contenu de InitHelloWorld.java fichier -

package com.tutorialspoint;

import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.BeansException;

public class InitHelloWorld implements BeanPostProcessor {
   public Object postProcessBeforeInitialization(Object bean, String beanName) 
      throws BeansException {
      
      System.out.println("BeforeInitialization : " + beanName);
      return bean;  // you can return any other object as well
   }
   public Object postProcessAfterInitialization(Object bean, String beanName) 
      throws BeansException {
      
      System.out.println("AfterInitialization : " + beanName);
      return bean;  // you can return any other object as well
   }
}

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 garantit un arrêt progressif et appelle 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"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

   <bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld"
      init-method = "init" destroy-method = "destroy">
      <property name = "message" value = "Hello World!"/>
   </bean>

   <bean class = "com.tutorialspoint.InitHelloWorld" />

</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 -

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