📜  Spring – 继承 Bean

📅  最后修改于: 2022-05-13 01:54:55.441000             🧑  作者: Mango

Spring – 继承 Bean

构造函数参数、属性值和容器特定信息(如初始化方法、静态工厂方法名称等)都可以在 bean 定义中找到。父定义的配置数据被传递给子 bean 定义。子定义能够根据需要覆盖或添加值。

尽管 Spring Bean 对继承的定义与Java类继承不同,但继承的概念是相同的。一个父 bean 定义可以用作模板,其他子 bean 可以从它继承所需的配置。在使用基于 XML 的配置元数据时,父属性用于标识子 bean 定义,父 bean 作为该属性的值。

我们之前已经看到了Java中继承的好处之一:可重用性。也就是说,如果基类具有某些属性,则子类将继承这些属性及其值。在 Child 类中,我们也可以覆盖这些值。我们可以在 Spring 中继承 bean 的属性和值,也可以覆盖它们。

实现:让我们考虑一个名为Customer的任意类,所以项目结构如下:  

第 1 步:创建“客户”类

档案:客户。Java

Java
// Java Program to Illustrate Customer Class
 
package com.geeksforgeeks.beans.inheritance;
 
// Class
public class Customer {
 
    // Class data members
    private String name;
    private String email;
    private String country;
 
    // Getters and setters
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
 
    public String getEmail() { return email; }
    public void setEmail(String email)
    {
        // this keyword refers to current instance itself
        this.email = email;
    }
 
    // Method
    public String getCountry() { return country; }
 
    // Setter
    public void setCountry(String country)
    {
        this.country = country;
    }
 
    // Method
    // To show message
    @Override public String toString()
    {
        // Print corresponding customer attributes
        return " Name:" + name + "\n Email:" + email
            + "\n Country:" + country;
    }
}


XML


 
    
    
    
     
    
    
    
    
    


Java
// Java Program to Illustrate Bean Inheritance
 
package com.geeksforgeeks.beans.inheritance;
 
// Importing required classes
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
// Class
public class BeanInheritanceTest {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Inheriting Bean by customer
        ClassPathXmlApplicationContext applicationContext
            = new ClassPathXmlApplicationContext(
                "beans.xml");
 
        Customer customer
            = (Customer)applicationContext.getBean(
                "customer");
 
        // Printing the customer info
        System.out.println(customer.toString());
    }
}



第 2 步:创建一个 spring beans.xml 文件,演示如何继承 bean。

文件:bean.xml

XML



 
    
    
    
     
    
    
    
    
    


我们在配置文件中定义了 2 个 bean

  • 具有 id 基础的 Bean。
  • 客户是父 bean,而具有相同 id 的第二个 bean 是子 bean。因此,country 属性及其值由子 bean 客户继承,然后向其添加两个附加属性。

第 3 步:创建一个加载这两个 bean 的类并显示带有继承值的输出。

Java

// Java Program to Illustrate Bean Inheritance
 
package com.geeksforgeeks.beans.inheritance;
 
// Importing required classes
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
// Class
public class BeanInheritanceTest {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Inheriting Bean by customer
        ClassPathXmlApplicationContext applicationContext
            = new ClassPathXmlApplicationContext(
                "beans.xml");
 
        Customer customer
            = (Customer)applicationContext.getBean(
                "customer");
 
        // Printing the customer info
        System.out.println(customer.toString());
    }
}


第 4 步:运行上面的类并查看输出

只有父 bean 的 Country 属性有值。尽管我们只为 Child 引入了两个属性,但它包含所有三个属性的值。结果,Country 属性已有效地从 Parent bean 传递到我们的 Child bean。