Vererbung der Spring - Bean - Definition

Eine Bean-Definition kann viele Konfigurationsinformationen enthalten, einschließlich Konstruktorargumente, Eigenschaftswerte und container-spezifische Informationen wie Initialisierungsmethode, Name der statischen Factory-Methode usw.

Eine untergeordnete Bean-Definition erbt Konfigurationsdaten von einer übergeordneten Definition. Die untergeordnete Definition kann je nach Bedarf einige Werte überschreiben oder andere hinzufügen.

Die Vererbung der Spring Bean-Definition hat nichts mit der Vererbung von Java-Klassen zu tun, aber das Vererbungskonzept ist dasselbe. Sie können eine übergeordnete Bean-Definition als Vorlage definieren und andere untergeordnete Beans können die erforderliche Konfiguration von der übergeordneten Bean erben.

Wenn Sie XML-basierte Konfigurationsmetadaten verwenden, geben Sie mithilfe der Taste eine untergeordnete Bean-Definition an parent Attribut, das die übergeordnete Bean als Wert dieses Attributs angibt.

Beispiel

Lassen Sie uns eine funktionierende Eclipse-IDE einrichten und führen Sie die folgenden Schritte aus, um eine Spring-Anwendung zu erstellen:

Schritte Beschreibung
1 Erstellen Sie ein Projekt mit dem Namen SpringExample und erstellen Sie ein Paket com.tutorialspoint unter demsrc Ordner im erstellten Projekt.
2 Fügen Sie die erforderlichen Spring-Bibliotheken mit der Option Externe JARs hinzufügen hinzu, wie im Kapitel Spring Hello World-Beispiel erläutert .
3 Erstellen Java - Klassen Hello World , HelloIndia und MainApp unter dem com.tutorialspoint Paket.
4 Erstellen Sie die Beans-Konfigurationsdatei Beans.xml untersrc Mappe.
5 Der letzte Schritt besteht darin, den Inhalt aller Java-Dateien und der Bean-Konfigurationsdatei zu erstellen und die Anwendung wie unten erläutert auszuführen.

Es folgt die Konfigurationsdatei Beans.xmlwo wir definiert „helloworld“ Bohne , die zwei Eigenschaften hat message1 und message2 . Die nächste "helloIndia" -Bohne wurde als untergeordnetes Element der "helloWorld" -Bohne mit using definiertparentAttribut. Das Kind bean inherits message2 Eigenschaft wie es ist, und überschreibt message1 Eigenschaft und führt eine weitere Eigenschaft 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>

Hier ist der Inhalt von HelloWorld.java Datei -

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

Hier ist der Inhalt von HelloIndia.java Datei -

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

Es folgt der Inhalt der MainApp.java Datei -

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

Nachdem Sie die Quell- und Bean-Konfigurationsdateien erstellt haben, lassen Sie uns die Anwendung ausführen. Wenn mit Ihrer Anwendung alles in Ordnung ist, wird die folgende Meldung gedruckt:

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

Wenn Sie hier beobachtet haben, haben wir message2 beim Erstellen der Bean "helloIndia" nicht übergeben, aber es wurde aufgrund der Vererbung der Bean-Definition übergeben.

Bean-Definitionsvorlage

Sie können eine Bean-Definitionsvorlage erstellen, die von anderen untergeordneten Bean-Definitionen ohne großen Aufwand verwendet werden kann. Beim Definieren einer Bean-Definitionsvorlage sollten Sie die nicht angebenclass Attribut und sollte angeben abstract Attribut und sollte das abstrakte Attribut mit dem Wert von angeben true wie im folgenden Code-Snippet gezeigt -

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

Die übergeordnete Bean kann nicht alleine instanziiert werden, da sie unvollständig ist, und sie wird auch explizit als abstrakt markiert . Wenn eine Definition wie diese abstrakt ist, kann sie nur als reine Template-Bean-Definition verwendet werden, die als übergeordnete Definition für untergeordnete Definitionen dient.