📜  Spring-Bean定义继承

📅  最后修改于: 2020-11-11 07:01:05             🧑  作者: Mango


Bean定义可以包含许多配置信息,包括构造函数参数,属性值和特定于容器的信息,例如初始化方法,静态工厂方法名称等。

子bean定义从父定义继承配置数据。子定义可以根据需要覆盖某些值,或添加其他值。

Spring Bean定义继承与Java类继承无关,但继承概念相同。您可以将父bean定义定义为模板,其他子bean可以从父bean继承所需的配置。

当您使用基于XML的配置元数据时,可以通过使用parent属性来指定子bean定义,并指定父bean作为该属性的值。

让我们拥有一个运行良好的Eclipse IDE,并采取以下步骤来创建一个Spring应用程序:

Steps Description
1 Create a project with a name SpringExample and create a package com.tutorialspoint under the src folder in the created project.
2 Add required Spring libraries using Add External JARs option as explained in the Spring Hello World Example chapter.
3 Create Java classes HelloWorld, HelloIndia and MainApp under the com.tutorialspoint package.
4 Create Beans configuration file Beans.xml under the src folder.
5 The final step is to create the content of all the Java files and Bean Configuration file and run the application as explained below.

以下是我们定义的“HelloWorld”豆它有两个属性MESSAGE1消息2配置文件beans.xml中。通过使用属性,下一个“ helloIndia” bean被定义为“ helloWorld” bean的子代。孩子继承豆消息2财产是,和覆盖MESSAGE1财产,并介绍了一个更多的财产MESSAGE3。





   
      
      
   

   
      
      
   

这是HelloWorld.java文件的内容-

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

这是HelloIndia.java文件的内容-

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

以下是MainApp.java文件的内容-

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

完成创建源和Bean配置文件后,让我们运行该应用程序。如果您的应用程序一切正常,它将打印以下消息:

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

如果您在此处观察到,我们在创建“ helloIndia” bean时没有传递message2,但是由于Bean Definition Inheritance而被传递。

Bean定义模板

您可以创建一个Bean定义模板,该模板可以由其他子bean定义使用,而无需花费很多精力。在定义Bean定义模板时,您不应指定class属性,而应指定abstract属性,并且应将true值指定为abstract属性,如以下代码片段所示-





   
      
      
      
   

   
      
      
   
   

父bean不能单独实例化,因为它是不完整的,并且还被明确标记为abstract 。当这样的定义是抽象的时,它只能用作纯模板bean定义,用作子定义的父定义。