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。