Spring Bean继承的简介说明

转自:

Spring Bean继承的简介说明

Bean定义包含了很多信息
如:配置信息、构造函数参数、属性值和容器的一些具体信息
如初始化方法、销毁方法等

  1. 子Bean可继承父Bean中的配置数据,也可在需要时,重写值及添加其他值
  2. Spring Bean定义的继承同Java中的继承无任何关系 您只需将父Bean 的定义作为一个模板,其它子 Bean 从父 Bean 中继承所需的配置
  3. 配置文件中可使用parent 属性来设置继承的父Bean
    1. 例: 下文将通过示例的方式将Bean继承的操作方法,如下所示:
      1. 创建 SpringDemo 项目,并在 src 目录下创建 com.java265 包
      2. 添加相应的 jar 包,可以参考我的第一个Spring程序
      3. 在 com.java265 包下创建 HelloWorld、HelloChina 和 MainApp 类
      4. 在 src 目录下创建 Spring 配置文件 Beans.xml
      5. 运行 SpringDemo 项目
      HelloWorld 类代码
       
      package com.java265;
      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 com.java265;
      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 class="com.java265.HelloWorld" id="helloWorld">
              <property name="message1" value="Hello World!">
              <property name="message2" value="Hello World2!">
          </property></property></bean>
         
          <bean class="com.java265.HelloChina" id="helloChina" parent="helloWorld">
              <property name="message1" value="Hello China!">
              <property name="message3" value="Hello China3!">
          </property></property></bean>
      </beans>
      
       
      MainApp 类代码
       
      
      package com.java265;
      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.xml 其它说明定义模板 我们可以使用 abstarct="true"将其定义为抽象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="com.java265.HelloChina"
              parent="beanTeamplate">
              <property name="message1" value="Hello China!" />
              <property name="message3" value="Hello China!" />
          </bean>
      </beans> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值