Spring Bean继承解析

在 Spring XML 配置中,我们通过子 Bean 的 parent 属性来指定需要继承的父 Bean,配置格式如下。

<!--父Bean-->
<bean id="parentBean" class="xxx.xxxx.xxx.ParentBean" >
    <property name="xxx" value="xxx"></property>
    <property name="xxx" value="xxx"></property>
</bean>

<!--子Bean--> 
<bean id="childBean" class="xxx.xxx.xxx.ChildBean" parent="parentBean"></bean>

spring bean 继承实例

创建一个名为 Animal 的类,代码如下。

package net.test;

public class Animal {
    private String name;
    private Integer age;
    public void setName(String name) {
        System.out.println("Animal setName:" + name);
        this.name = name;
    }
    public void setAge(Integer age) {
        System.out.println("Animal setAge:" + age);
        this.age = age;
    }
    @Override
    public String toString() {
        return "Animal{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

创建一个名为 Dog 的类,代码如下。

package net.test;

public class Dog {
    private String name;
    private Integer age;
    private String call;
    public void setCall(String call) {
        System.out.println("Dog setCall:" + call);
        this.call = call;
    }
    public void setName(String name) {
        System.out.println("Dog setName:" + name);
        this.name = name;
    }
    public void setAge(Integer age) {
        System.out.println("Dog setAge:" + age);
        this.age = age;
    }
    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", call='" + call + '\'' +
                '}';
    }
}

在 src 目录下,创建 Spring 配置文件 Beans.xml,配置内容如下。

<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="animal" class="net.test.Animal">
        <property name="name" value="动物"></property>
        <property name="age" value="15"></property>
    </bean>
    <bean id="dog" class="net.test.Dog" parent="animal">
        <property name="name" value="小狗"></property>
        <property name="call" value="小狗叫"></property>
    </bean>
</beans>

创建一个名为 MainApp 的类,代码如下。

package net.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
    public static void main(String[] args) {
        //获取 ClassPathXmlApplicationContext 容器
        ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
        Dog dog = context.getBean("dog", Dog.class);
        System.out.println(dog);
    }
}

执行 MainApp 中的 main 方法,控制台输出如下。

Animal setName:动物
Animal setAge:15
Dog setName:小狗
Dog setAge:15
Dog setCall:小狗叫
Dog{name='小狗', age=15, call='小狗叫'}