SpringBean继承

开课吧开课吧锤锤2021-08-09 11:54

Bean定义可以包含很多配置信息,包括构造函数参数、属性值和容器的一些具体信息,如初始化方法、销毁方法等。子Bean可以继承父Bean的配置数据,根据需要,子Bean可以重写值或添加其它值。  

SpringBean继承

需要注意的是,SpringBean定义的继承与Java中的继承无关。您可以将父Bean的定义作为一个模板,其它子Bean从父Bean中继承所需的配置。  

在配置文件中通过parent属性来指定继承的父Bean。  

示例  

下面使用EclipseIDE演示Bean继承,步骤如下:  

1、创建SpringDemo项目,并在src目录下创建net.biancheng包。  

2、添加相应的jar包。  

3、在net.biancheng包下创建HelloWorld、HelloChina和MainApp类。  

4、在src目录下创建Spring配置文件Beans.xml。  

5、运行SpringDemo项目。  

HelloWorld类代码如下。 

package net.biancheng;
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);
    }
}

HelloChina类代码如下。  

package net.biancheng;
public class HelloChina {
    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("China Message1 : " + message1);
    }
    public void getMessage2() {
        System.out.println("China Message2 : " + message2);
    }
    public void getMessage3() {
        System.out.println("China Message3 : " + message3);
    }
}

在配置文件中,分别为HelloWorld中的message1和message2赋值。使用parent属性将HelloChain定义为HelloWorld的子类,并为HelloChain中的message1和message3赋值。Beans.xml文件代码如下。  

<?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="net.biancheng.HelloWorld">
        <property name="message1" value="Hello World!" />
        <property name="message2" value="Hello World2!" />
    </bean>
   
    <bean id="helloChina" class="net.biancheng.HelloChina"
        parent="helloWorld">
        <property name="message1" value="Hello China!" />
        <property name="message3" value="Hello China3!" />
    </bean>
</beans>

MainApp类代码如下。  

package net.biancheng;
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();
        HelloChina objB = (HelloChina) context.getBean("helloChina");
        objB.getMessage1();
        objB.getMessage2();
        objB.getMessage3();
    }
}

运行结果如下。 

World Message1 : Hello World!
World Message2 : Hello World2!
China Message1 : Hello China!
China Message2 : Hello World2!
China Message3 : Hello China3!

 由结果可以看出,我们在创建helloChina时并没有给message2赋值,但是由于Bean的继承,将值传递给了message2。  

Bean定义模板  

您可以创建一个Bean定义模板,该模板只能被继承,不能被实例化。创建Bean定义模板时,不用指定class属性,而是指定abstarct="true"将该Bean定义为抽象Bean,如下所示。  

<?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 World2!" />
        <property name="message3" value="Hello World3!" />
    </bean>
    <bean id="helloChina" class="net.biancheng.HelloChina"
        parent="beanTeamplate">
        <property name="message1" value="Hello China!" />
        <property name="message3" value="Hello China!" />
    </bean>
</beans>

以上就是开课吧广场小编为大家整理发布的“SpringBean继承”一文,更多Java教程相关内容尽在开课吧广场Java教程频道!  

SpringBean继承

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享
全部评论快来秀出你的观点
登录 后可发表观点…
发表
暂无评论,快来抢沙发!
高并发编程训练营