Spring - Héritage de définition de haricot

Une définition de bean peut contenir de nombreuses informations de configuration, y compris des arguments de constructeur, des valeurs de propriété et des informations spécifiques au conteneur telles que la méthode d'initialisation, le nom de la méthode de fabrique statique, etc.

Une définition de bean enfant hérite des données de configuration d'une définition parent. La définition enfant peut remplacer certaines valeurs ou en ajouter d'autres, si nécessaire.

L'héritage de définition Spring Bean n'a rien à voir avec l'héritage de classe Java, mais le concept d'héritage est le même. Vous pouvez définir une définition de bean parent comme modèle et d'autres beans enfants peuvent hériter de la configuration requise du bean parent.

Lorsque vous utilisez des métadonnées de configuration XML, vous indiquez une définition de bean enfant à l'aide de la parent attribut, en spécifiant le bean parent comme valeur de cet attribut.

Exemple

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 , HelloIndia 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 fichier de configuration Beans.xmloù nous avons défini le haricot « helloWorld » qui a deux propriétés message1 et message2 . Le prochain bean "helloIndia" a été défini comme un enfant du bean "helloWorld" en utilisantparentattribut. Les haricots hérite des enfants de la propriété tout comme, et overrides message1 la propriété et une autre propriété introduit message3 .

<?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">
      <property name = "message1" value = "Hello World!"/>
      <property name = "message2" value = "Hello Second World!"/>
   </bean>

   <bean id ="helloIndia" class = "com.tutorialspoint.HelloIndia" parent = "helloWorld">
      <property name = "message1" value = "Hello India!"/>
      <property name = "message3" value = "Namaste India!"/>
   </bean>
</beans>

Voici le contenu de HelloWorld.java fichier -

package com.tutorialspoint;

public class HelloWorld {
   private String message1;
   private String message2;

   public void setMessage1(String message){
      this.message1 = message;
   }
   public void setMessage2(String message){
      this.message2 = message;
   }
   public void getMessage1(){
      System.out.println("World Message1 : " + message1);
   }
   public void getMessage2(){
      System.out.println("World Message2 : " + message2);
   }
}

Voici le contenu de HelloIndia.java fichier -

package com.tutorialspoint;

public class HelloIndia {
   private String message1;
   private String message2;
   private String message3;

   public void setMessage1(String message){
      this.message1 = message;
   }
   public void setMessage2(String message){
      this.message2 = message;
   }
   public void setMessage3(String message){
      this.message3 = message;
   }
   public void getMessage1(){
      System.out.println("India Message1 : " + message1);
   }
   public void getMessage2(){
      System.out.println("India Message2 : " + message2);
   }
   public void getMessage3(){
      System.out.println("India Message3 : " + message3);
   }
}

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");
      
      HelloWorld objA = (HelloWorld) context.getBean("helloWorld");
      objA.getMessage1();
      objA.getMessage2();

      HelloIndia objB = (HelloIndia) context.getBean("helloIndia");
      objB.getMessage1();
      objB.getMessage2();
      objB.getMessage3();
   }
}

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 -

World Message1 : Hello World!
World Message2 : Hello Second World!
India Message1 : Hello India!
India Message2 : Hello Second World!
India Message3 : Namaste India!

Si vous avez observé ici, nous n'avons pas transmis message2 lors de la création du bean "helloIndia", mais il a été transmis à cause de l'héritage de définition du bean.

Modèle de définition de haricot

Vous pouvez créer un modèle de définition de bean, qui peut être utilisé par d'autres définitions de bean enfant sans trop d'efforts. Lors de la définition d'un modèle de définition de bean, vous ne devez pas spécifierclass attribut et devrait spécifier abstract attribut et doit spécifier l'attribut abstrait avec une valeur de true comme indiqué dans l'extrait de code suivant -

<?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 = "beanTeamplate" abstract = "true">
      <property name = "message1" value = "Hello World!"/>
      <property name = "message2" value = "Hello Second World!"/>
      <property name = "message3" value = "Namaste India!"/>
   </bean>

   <bean id = "helloIndia" class = "com.tutorialspoint.HelloIndia" parent = "beanTeamplate">
      <property name = "message1" value = "Hello India!"/>
      <property name = "message3" value = "Namaste India!"/>
   </bean>
   
</beans>

Le bean parent ne peut pas être instancié seul car il est incomplet et il est également explicitement marqué comme abstrait . Lorsqu'une définition est abstraite comme celle-ci, elle n'est utilisable que comme pure définition de bean modèle qui sert de définition parente pour les définitions enfants.